Задать вопрос
Контакты

Достижения

Все достижения (26)

Наибольший вклад в теги

Все теги (129)

Лучшие ответы пользователя

Все ответы (514)
  • Mutex RWMutex отличия?

    RWMutex нужен, когда у нас есть объект, который нельзя параллельно писать, но можно параллельно читать. Например, стандартный тип map.
    Перед записью в защищаемый мьютексом объект делается .Lock(), а вызовы .Lock() и .RLock() в других горутинах будут ждать, пока вы не отпустите мьютекс через .Unlock().
    Перед чтением защищаемого объекта делается .RLock() и только вызовы .Lock() в других горутинах блокируются, вызовы .RLock() спокойно проходят. Когда отпускаете мьютекс через .RUnlock(), ждущие вызовы .Lock() по-очереди могут забирать мьютекс на себя.
    Таких образом обеспечивается параллельное чтение объекта несколькими горутинами, что улучшает производительность.
    Ответ написан
    4 комментария
  • Зачем в языке Go приняты отступы в 8 символов?

    Там не 8 символов, там tab. Вы можете настроить в вашем текстовом редакторе размер табуляции в нужное вам количество символов.
    Ответ написан
    Комментировать
  • Есть ли в свободном доступе системы распознавания обьектов?

    Есть опенсорсный проект YOLO, который работает очень даже неплохо. https://pjreddie.com/darknet/yolo/
    Классифицирует объекты в кадре за 20ms при использовании видеокарты или спец. железок от Nvidia.
    На процессоре около 6-9 секунд.
    Ответ написан
    1 комментарий
  • Для чего нужны массивы в golang?

    Если в программе есть срез, значит в памяти есть соответствующий ему массив. Вы сами его не создаёте, но рантайм гошки его создаёт.
    Массив нужен как более низкоуровневый примитив, для ускорения работы в некоторых случаях, чтобы не плодить лишних указателей.
    Ответ написан
    Комментировать
  • В чем смысл использования Golang как веб сервер?

    Го намного проще многих других языков, соответственно проще читать и понимать чужой код, что ценится в больших компаниях, где работает много людей. Плюсом ценится то, что довольно сложно выстрелить себе в ногу.

    Тесты есть разные, Го примерно идет в ногу с Джавой и Шарпом, особенно в случае многопоточных нагруженных серверов. А если посмотреть сколько он потребляет при этом памяти, то даже выходит вперед по эффективности.

    На Го очень просто писать многопоточность и асинхронность, не нужно думать об await-ах, каждая горутина имеет свой стек, что снимает с программиста много головной боли. Вся стандартная библиотека и большой набор библиотек с гитхаба из коробки поддерживают асинхронность и потоковую обработку данных, работать с этим сильно проще, чем в других языках. Соответственно, сложнее накосячить.

    Но абстракций на Го очень мало, по сравнению с той же Джавой, он довольно бедно выглядит (что и дает простоту чтения кода). Это является минусом в определенных ситуациях, поэтому на Го стараются писать небольшие сервисы.

    В итоге, легковесность горутин, легкость работы с ними и асинхронная модель из коробки (не создается тред на каждую рутину, а наоборот, рутины обрабатываются разными тредами по необходимости) привели к тому, что ниша Го это сервисы, которые упираются в ожидание ресурсов от каких-то внешних систем по сети. То есть, идеальный кейс для веб-сервера, который собирает под капотом инфу с БД и других сервисов. По сути такой сервис большую часть времени ждет ресурсов по сети, в Го это ожидание сделано очень эффективно.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (2)