Проверяет понимание worker pool.
Worker pool — это шаблон, позволяющий ограничить количество одновременно выполняемых задач. Вместо запуска новой горутины для каждой задачи, задачи передаются в фиксированное количество воркеров.
Worker pool (или пул воркеров) — это шаблон, который позволяет:
Ограничить параллелизм (например, запуск не более N задач одновременно).
Эффективно использовать ресурсы, особенно при большом потоке задач.
Контролировать жизнь горутин и избежать утечек памяти.
Канал задач (chan Task)
N горутин-воркеров, которые читают задачи из канала и обрабатывают их
Канал результатов, в который записываются результаты обработки
tasks := make(chan Task)
results := make(chan Result)
for i := 0; i < workerCount; i++ {
go func() {
for task := range tasks {
result, err := Process(task)
if err == nil {
results <- result
}
}
}()
}Позволяет обрабатывать тысячи задач, используя ограниченное число горутин
Уменьшает вероятность перегрузки системы
Когда применять:
Когда необходимо массово обрабатывать задачи, но ограничить нагрузку на CPU и память.