Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.
Как организовать ограниченный worker pool на Go
Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Нужно обработать поток задач не более чем N goroutines одновременно, собрать результаты и поддержать отмену. Как связать channels, workers и завершение?
Ответ
Создайте ограниченный jobs-канал, запустите ровно N workers и собирайте результаты отдельным потребителем. Закройте results только после завершения всех workers.
Производитель закрывает jobs, когда больше задач не будет. Workers читают его, выполняют работу вне locks и отправляют результат с проверкой ctx.Done. WaitGroup используется для ожидания и последующего close(results). Потребитель не должен ждать закрытия, блокируя самих отправителей. Ограниченная очередь обеспечивает backpressure и удерживает память под контролем.