Вы когда-нибудь видели шаблон «пул рабочих» в языке программирования?
Если вы не хотите, давайте немного поговорим об этом

Пул рабочих процессов - это «пул» потоков, или в Golang его горутину следует рассматривать как рабочий, термин «пул» означает, что у нас есть несколько рабочих, которые выполняют работу в синхронной или асинхронной форме.

Итак, в чем разница между пулом рабочих и пулом рабочих? Давайте посмотрим на реализацию двух

Пул рабочих

Список горутин потребляет одну очередь заданий и выполняет работу

Пул рабочих

Список gorountines, у которого есть собственная очередь заданий, и всякий раз, когда он свободен, он регистрирует свою очередь в «рабочей очереди». Обработчик заданий должен использовать очередь заданий из рабочей очереди и отправить задание в эту очередь заданий.

Что лучше?

Не производительность, не память, а возможность управления и тайм-аута

Что произойдет, если вы захотите отсрочить выполнение задания? В первой реализации невозможно определить, выбрано ли задание, потому что это зависит от времени выполнения другого задания в очереди.

Во второй реализации у нас есть приятный и более явный контролируемый тайм-аут. Установка тикера тайм-аута перед получением канала работы из рабочего канала - это способ контролировать тайм-аут для получения позиции «обслуживается».

Советы №1. В первой реализации вы можете получить контроль времени ожидания с помощью небуферизованного канала.

Советы №2: это Репо уже делает реализацию (вторую) простой, как пирог.