Как ограничить параллелизм?

Middle
288 просмотров
AFK Offer AI

Три способа. Buffered channel как семафор: sem := make(chan struct{}, maxWorkers), sem <- struct{}{} перед запуском, <-sem после. Worker pool: фиксированное число горутин читают задачи из канала. errgroup.SetLimit(n): g.SetLimit(10), g.Go(func() error {...}) — не запустит больше 10 одновременно. Для простых случаев хватает семафора, для обработки ошибок — errgroup, для долгоживущих задач — worker pool. Не забывай про context для отмены.

Следующий вопрос

Как писать commit message?