Один из часто используемых паттернов многозадачности - пул обработчиков (worker pool) Используется, когда требуется искусственно ограничить количество одновременно запускаемых горутин.
Вы реализовали что-то больше похожее на семафор, но не на воркер пул
@PakshinaNina10 күн бұрын
@@pasha_crd нет :)
@ghostbuster52662 күн бұрын
@@PakshinaNina Согласен что похоже но разница в том что в воркер пуле фиксированное значение горутин которые работают все время и ждут данные на вход, а при семафоре у нас число горутин варьируется от степени нагруженности системы(не будет создана новая горутина пока старая не отработает), и следуя этой логике на видео действительно не воркер пул
@PakshinaNina2 күн бұрын
@@ghostbuster5266 ну вот ты сам написал, что такое воркер пул. Именно это и реализовано.
@PakshinaNina2 күн бұрын
@@ghostbuster5266 число одновременно запущенных горутин = размеру буфера. Как только воркер завершает исполнение, запускается следующая горутина. Одновременно выполняется только N воркеров
@ghostbuster52662 күн бұрын
@@PakshinaNina у вас на каждую новую задачу создается новый воркер. Их количество меняется от нагрузки(если не будет задач то и нет воркеров в работе) и это семафор
@lords_inactive14 күн бұрын
Здравствуйте, посмотрел ваше недавнее видео про http3, и немного вопрос не по теме, но все же связан с сетевыми запросами. Как можно уменьшить максимально время, подачи запроса со стороны клиента к серверу? Используя Golang
@PakshinaNina14 күн бұрын
@@lords_inactive добрый день, вы используете клиент го из стандартной библиотеки? А в каком месте сейчас задержка? Пока по описанию не понимаю, что можно предложить :)
@lords_inactive14 күн бұрын
@@PakshinaNina да использую net/http , заметил что на Go запросы проходят быстрее чем через другие яп, например быстрее python/C++ и тд, иногда даже в два раза. И быстрее запросов в браузере почти всегда. Но я думаю что есть возможность еще настроить запросы в Go так что бы скорость была еще быстрее.
@PakshinaNina14 күн бұрын
@@lords_inactiveна Хабре есть хорошая статья «Ускоряем интернет-запросы и спим спокойно» на эту тему!
@PakshinaNina14 күн бұрын
@@lords_inactive возможно можно ускорить за счет сетевых настроек. Или попробовать написать свой клиент поверх TCP сокетов :)
@witcher_streams18 күн бұрын
Как рассчитать оптимальное количество воркеров, возможно есть какая-нибудь формула в зависимости от количества ядер или что-то подобное?
@PakshinaNina18 күн бұрын
@@witcher_streams хороший вопрос, но здесь нет точного ответа) Например, если у Вас CPU-bound операции (например, какие-то математические операции), то не имеет смысл делать много воркеров. А лучше сколько GOMAXPROCS столько и воркеров. Если операции I/O, то воркеров может быть тысячи. Можно приблизительно посчитать сколько в пике горутина будет потреблять памяти, напримерм с помощью бенчмарков или профайлинга. И уже посмотреть по доступным ресурсам.
@PakshinaNina6 күн бұрын
@@witcher_streams кстати, я поизучала вопрос. Про cpu-bound для го не очень актуально. Я 8го августа буду делать доклад в мтс, хочу частично эту тему затронуть))
@witcher_streams6 күн бұрын
@@PakshinaNina я попробовал уменьшить количество воркеров до числа ядер и производительность осталась примерно на том же уровне, то есть создавать много горутин действительно нет смысла, буду ждать доклад о том как это сделать правильно