Границы WaitGroup
На втором пакете тот же счётчик ожидания повёл себя странно: отчёт уходил, когда половина задач ещё работала. Миша нашёл причину — счётчик начинали использовать заново, не дождавшись, пока предыдущий пакет закончится. Он вынес ожидание в конец цикла, и пакеты пошли подряд без перекосов.
WaitGroup умеет ровно одно — дождаться завершения; ошибки, лимиты параллелизма и отмену строят другими инструментами.
Не собирает ошибки
Если одна из десяти задач упала, Wait ничего не скажет. Собирать ошибки придётся самим: канал ошибок, мьютекс вокруг слайса, атомарный флаг. Урок покажет готовое — errgroup.
Не лимитирует параллелизм
wg.Add(1) на тысячу задач запустит тысячу горутин — WaitGroup не ограничивает, сколько из них работают одновременно. Лимиты — это семафор или воркер-пул, а не WaitGroup.
Не отменяет
Отменить запущенные горутины через WaitGroup нельзя: нет ни сигнала, ни канала. Отмена — через context или done-канал. WaitGroup лишь говорит «все закончили» — что именно закончилось, он не знает.
Вы узнаете:
- как комбинация WaitGroup и канала ошибок заменяет errgroup
- как WaitGroup сочетается с семафором
Проверьте себя
WaitGroup лимитирует параллелизм задач?
WaitGroup умеет отменять запущенные горутины?
правильных ответов
WaitGroup — счётчик завершений, и всё. Ошибки — errgroup, лимиты — семафор, отмена — context. Каждый инструмент делает одно.
10 000 ₽ · 60 минут · онлайн