Конкурентность в Go
Продолжение goroutines и channels из Go-трека: worker pool, fan-in/fan-out, errgroup, гонки и graceful shutdown
Уровень: Средний · около 3 ч · после курса: Соберёшь worker pool и pipeline, поймаешь гонку через -race и остановишь сервис без потерь
Чему научишься
- Применить goroutine + channel
- Реализовать worker pool
- Использовать errgroup для параллельных задач
- Реализовать graceful shutdown
- Избегать data race (понимать -race детектор)
- Применить контексты для cancellation
Уроки курса (6)
Модуль 1 · Горутины, каналы, sync
Планировщик GMP, каналы и мьютексы
- Горутины под капотом: планировщик и GMP - Как Go runtime управляет горутинами, модель GMP, stack growth, утечки горутин
- Каналы: паттерны и подводные камни - Buffered vs unbuffered, directional channels, select, deadlock, done-channel
- Пакет sync: мьютексы, пулы и одноразовая инициализация - sync.Mutex, RWMutex, WaitGroup, Once, Map, Pool - когда что использовать
Модуль 2 · Паттерны и тестирование
fan-in/out, pipeline, worker pool, errgroup, race detection
- Паттерны: fan-in, fan-out, pipeline, worker pool - Продвинутые паттерны конкурентности для параллельной обработки данных
- errgroup и graceful shutdown - golang.org/x/sync/errgroup, context cancellation, signal.NotifyContext, graceful shutdown HTTP-сервера
- Race conditions и тестирование конкурентного кода - go run -race, типичные гонки данных, тестирование конкурентного кода, t.Parallel()