Как организовать ограниченный worker pool на Go

Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.

Короткий ответ

Что ответить на собеседовании

Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.

Подробный разбор

Ответ с пояснениями

Условие

Нужно обработать поток задач не более чем N goroutines одновременно, собрать результаты и поддержать отмену. Как связать channels, workers и завершение?

Ответ

Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.

Производитель закрывает jobs, когда больше задач не будет. Workers читают его, выполняют работу вне locks и отправляют результат с проверкой ctx.Done. WaitGroup используется для ожидания и последующего close(results). Потребитель не должен ждать закрытия, блокируя самих отправителей. Ограниченная очередь обеспечивает backpressure и удерживает память под контролем.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее