← Все навыки

Go. Конкурентное программирование

От интуиции о процессах и потоках до горутин, каналов, context и устойчивых конкурентных сервисов

7 модулей, 21 тема Junior+ / Middle Индивидуально с ментором

Для кого этот навык

  • Go-разработчики, которые хотят углубить понимание конкурентности и перестать бояться гонок
  • Разработчики, переходящие на Go и желающие освоить его главную суперсилу
  • Все, кто готовится к секции по конкурентности на собеседовании

Что вы получите

Глубокое понимание Модель планировщика G-M-P, work stealing, GOMAXPROCS и утечки горутин
Паттерны Producer-Consumer, Worker Pool, Fan-out/Fan-in, семафор на канале, graceful shutdown
Практика Четыре практических задания с проверкой через go test -race и разбором с ментором
Готовность к интервью Отдельный модуль с вопросами по горутинам, каналам, select и context

Программа

Введение в курс

Как устроен курс и как с ним работать
  • Из чего состоит курс и в каком порядке идти
  • Что понадобится на входе

Основы и интуиция

Процессы, потоки и планировщик Go
  • Программа, процесс и поток: что из этого чем управляет
  • Зачем нужна конкурентность и во что упирается однопоточная программа
  • Конкурентность против параллелизма, роль GOMAXPROCS
  • Философия Go и модель планировщика G-M-P

Горутины и синхронизация

WaitGroup, гонки, mutex и atomic
  • Запуск горутин и ожидание через sync.WaitGroup
  • Состояние гонки и защита памяти: sync.Mutex и RWMutex
  • Атомарные операции: Add, Load, compare-and-swap
  • Задание: счётчик с гонкой и без — сравниваем mutex и atomic

Каналы и паттерны обмена

«Share memory by communicating» на практике
  • Каналы: буферизованные и небуферизованные, закрытие, value/ok, for-range
  • Паттерны Worker Pool и Fan-out/Fan-in
  • Задание: генератор задач и пул воркеров с корректным закрытием канала

Select, отмена, контекст

Как останавливать то, что уже запущено
  • Оператор select: мультиплексирование, time.After, default
  • Кооперативная отмена, канал done/stop, завершение по закрытию канала задач
  • context.Context как стандарт отмены: WithCancel, WithTimeout, WithDeadline
  • Утечки горутин: примеры и как их избежать
  • Задание: воркер с таймаутом и остановкой

Практика и продвинутые темы

Устойчивость, примеры из сервисов, тестирование
  • Паника в горутине: defer + recover внутри воркера и идея Supervisor
  • Примеры из реальных сервисов: параллельные запросы, семафор на канале, graceful shutdown
  • Тестирование конкурентного кода и разбор антипаттернов
  • Задание: мини-агрегатор микросервисов с общим таймаутом

Вопросы с собеседований

Разбор вопросов по всем темам курса
  • Вопросы по каждой теме курса с эталонными ответами
  • Формулировки уровня Junior+, Middle и Senior

Практика

Четыре задания с проверкой через go test -race — решаете сами, приносите на разбор ментору

  • Счётчик с гонкой: поймать через -race, починить mutex и atomic, сравнить скорость
  • Генератор задач и пул воркеров на буферизованных каналах
  • Воркер с таймаутом и остановкой через select
  • Мини-агрегатор микросервисов: fan-out/fan-in, общий context-таймаут, паники как ошибки
  • Плюс разбор примеров из реальных сервисов: семафор на канале и graceful shutdown по сигналу ОС