Как стать автором
Обновить

Комментарии 4

Не нашел 4 часть. Она существует?

Пакет conc не смотрели для этих целей?

Отличная библиотека – мне понравилась:

  • подходит для запуска группы «коротких» задач в режиме online – pool создается под набор задач, отрабатывает и удаляется

  • накладные расходы сопоставимы – от 300 ns на задачу. В моем варианте можно снизить до 150 ns – но это физический придел, на накладные расходы обработки каналов.

  • контроль за результатами работ task построен на sync.WaitGroup - это немного быстрее, чем через каналы, но экстренно остановить не получится

  • задачи shutdown и отработки timeout библиотека не решает – для нас это было критично

В первой реализации мы тоже запускали задачи через online pool – см. (*Pool)RunOnline, но столкнулись с проблемами:

  • Источником «длинных» задач у нас является внешний REST, если под каждый создавать отдельный Pool и сразу его стартовать, то резко растет расход памяти и cpu. Kuber пытается стартовать много новых Pod. Такой подход сразу «зарубили»

  • При остановке Pod online pool остановить не получится, пока sync.WaitGroup не разблокируется.

В моем шаблоне упор сделан на background pool который работает постоянно в фоне и принимает задачи. Можно создать несколько разных pool под разные классы задач (с разной concurrency, timeout, длинной канал очереди)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации