> Используете ли вы воркерпул для ограничения количества горутин в Go (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Да, я активно использую паттерн воркерпула (worker pool) для ограничения количества одновременно работающих горутин. Это помогает избежать неконтролируемого потребления ресурсов (память, файловые дескрипторы) и перегрузки внешних систем (например, БД или API). Типичная реализация выглядит так: создаём буферизированный канал задач, запускаем фиксированное число воркеров (например, 10), которые читают из этого канала, и отправляем задачи через канал. После завершения закрываем канал и ждём завершения всех воркеров через sync.WaitGroup. Например:

GO
const numWorkers = 10
tasks := make(chan Task, 100)
var wg sync.WaitGroup
for i := 0; i < numWorkers; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for task := range tasks {
process(task)
}
}()
}
for _, task := range allTasks {
tasks <- task
}
close(tasks)
wg.Wait()

Такой подход даёт предсказуемость и контроль над параллелизмом, что критично для production-систем.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью