Материал проходит вычитку — возможны неточности.
Урок 86 из 118

Границы WaitGroup

На втором пакете тот же счётчик ожидания повёл себя странно: отчёт уходил, когда половина задач ещё работала. Миша нашёл причину — счётчик начинали использовать заново, не дождавшись, пока предыдущий пакет закончится. Он вынес ожидание в конец цикла, и пакеты пошли подряд без перекосов.

Главная мысль

WaitGroup умеет ровно одно — дождаться завершения; ошибки, лимиты параллелизма и отмену строят другими инструментами.

Не собирает ошибки

Если одна из десяти задач упала, Wait ничего не скажет. Собирать ошибки придётся самим: канал ошибок, мьютекс вокруг слайса, атомарный флаг. Урок покажет готовое — errgroup.

Не лимитирует параллелизм

wg.Add(1) на тысячу задач запустит тысячу горутин — WaitGroup не ограничивает, сколько из них работают одновременно. Лимиты — это семафор или воркер-пул, а не WaitGroup.

Не отменяет

Отменить запущенные горутины через WaitGroup нельзя: нет ни сигнала, ни канала. Отмена — через context или done-канал. WaitGroup лишь говорит «все закончили» — что именно закончилось, он не знает.

В следующем уроке

Вы узнаете:

  • как комбинация WaitGroup и канала ошибок заменяет errgroup
  • как WaitGroup сочетается с семафором
Задание · вопросы

Проверьте себя

Вопрос 1 из 2

WaitGroup лимитирует параллелизм задач?

Вопрос 2 из 2

WaitGroup умеет отменять запущенные горутины?

Итоги

WaitGroup — счётчик завершений, и всё. Ошибки — errgroup, лимиты — семафор, отмена — context. Каждый инструмент делает одно.

Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки