задачи. а на воркере -
select {
case <-w.tasks:
doJob()
case <-w.closeWorkersCh:
return
}
Но наверно надо было просто канал закрывать с задачами. Но как мне узнать что все воркеры отработали?
Чего только не сделают чтобы не делать иомонатки. Выдавать результат операции дорогое удовольствие.
Если количество воркеров известно, то можно при завершении воркера заставлять его отписывать в канал без буффера, который снаружи читается в цикле c количеством итераций равным количеству воркеров. Правда вопрос, а почему не WaitGroup или Errgroup?
У тебя атомик вжух - и везде inc, а пока ты там селектишь по каналам тебя могли переключить уже много раз
Я бы завел флаг isStopping uint32 и в shutdown его взводил в 1 атомиком, а в воркерах первым делом так же через атомик его проверял
https://play.golang.org/p/fM9F4A_UbUc
Да, понял. Спасибо
Обсуждают сегодня