Worker pool - паттерн, при котором создается фиксированное число горутин (воркеров), каждая из которых обрабатывает задачи из общего канала. Так ограничивается степень параллелизма и потребление памяти/CPU.
jobs := make(chan int, 100)
results := make(chan int, 100)
for w := 0; w < 5; w++ {
go func() {
for j := range jobs { results <- j * 2 }
}()
}
for j := 1; j <= 10; j++ { jobs <- j }
close(jobs)
for a := 1; a <= 10; a++ { <-results }Закрытие канала jobs сигнализирует воркерам о завершении.