Вы когда-нибудь видели шаблон «пул рабочих» в языке программирования?
Если вы не хотите, давайте немного поговорим об этом
Пул рабочих процессов - это «пул» потоков, или в Golang его горутину следует рассматривать как рабочий, термин «пул» означает, что у нас есть несколько рабочих, которые выполняют работу в синхронной или асинхронной форме.
Итак, в чем разница между пулом рабочих и пулом рабочих? Давайте посмотрим на реализацию двух
Пул рабочих
Список горутин потребляет одну очередь заданий и выполняет работу
Пул рабочих
Список gorountines, у которого есть собственная очередь заданий, и всякий раз, когда он свободен, он регистрирует свою очередь в «рабочей очереди». Обработчик заданий должен использовать очередь заданий из рабочей очереди и отправить задание в эту очередь заданий.
Что лучше?
Не производительность, не память, а возможность управления и тайм-аута
Что произойдет, если вы захотите отсрочить выполнение задания? В первой реализации невозможно определить, выбрано ли задание, потому что это зависит от времени выполнения другого задания в очереди.
Во второй реализации у нас есть приятный и более явный контролируемый тайм-аут. Установка тикера тайм-аута перед получением канала работы из рабочего канала - это способ контролировать тайм-аут для получения позиции «обслуживается».
Советы №1. В первой реализации вы можете получить контроль времени ожидания с помощью небуферизованного канала.
Советы №2: это Репо уже делает реализацию (вторую) простой, как пирог.