← ко всем постам
2026-06-25 · #concurrency

Пул воркеров: ограничиваем параллелизм

Наивный подход — go на каждый элемент — может породить миллионы горутин и положить систему. Пул воркеров ограничивает число одновременных операций.

jobs := make(chan int, 100)
var wg sync.WaitGroup

for w := 0; w < 4; w++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        for j := range jobs { process(j) }
    }()
}

Четыре воркера читают из общего канала jobs. Сколько бы задач ни пришло — параллельно выполняется не больше четырёх. WaitGroup дожидается завершения всех.

Число воркеров подбирают под задачу: для CPU-нагрузки — примерно по числу ядер, для сетевых операций можно больше.