Модуль 7.2: Конкурентность
Goroutines
Goroutines — лёгкие потоки Go. Узнаем, чем они отличаются от Promise и event loop, и научимся запускать тысячи задач параллельно одним словом go.
Каналы и select
Каналы — главный способ общения горутин в Go. Буферизованные и небуферизованные каналы, select, паттерны fan-in/fan-out и worker pool.
Пакет sync и гонки данных
Mutex, RWMutex, WaitGroup, Once, atomic и Pool — инструменты безопасной работы с общей памятью. Разбираемся с data race и гонками состояния, и учимся искать их с go run -race.
context: отмена и таймауты
context — стандартный способ отменять операции и пробрасывать таймауты по всей цепочке вызовов. Разбираем WithCancel, WithTimeout, WithDeadline и почему ctx всегда первый аргумент.
Планировщик, память и GC
Модель G-M-P, вытесняющая многозадачность, escape-анализ, стек vs куча, и как работает GC в Go 1.26 с новым Green Tea сборщиком.
Тестирование, бенчмарки, профилирование
Пакет testing, table-driven тесты, бенчмарки с -benchmem и профилирование через pprof. Как найти узкое место в конкурентном коде.
Практика: конкурентное бронирование без двойной брони
Собираем всё вместе: обрабатываем конкурентные запросы на один слот без двойного бронирования (mutex/канал), рассылаем напоминания через worker pool, отменяем через context.