- добавления воркера
- удаления воркера
- полного шатдауна
- добавления таски
- канал для чтения результатов вычислений
Главная логика воркера лежит в методе StartHandling. Он пытается прочитать данные из нескольких каналов:
- если есть запрос полного завершения - запускается логика завершения
- если есть запрос добавления воркера в пул, запускается горутина, в которой есть свой select, который:
-
- если есть запрос удаления воркера - воркер его читает и успешно самоуничтожается
-
- если есть запрос на выполнение таски - воркер просто её выполняет и отправляет в канал с результатами вычислений
Для предотвращения гонки использовался withCancel вместе с WaitGroup (чтобы дождаться когда все таски закончат свою работу, чтобы после этого уже закрыть все каналы)