Concurrency in Go
О чём курс
Этот интенсивный курс по Concurrency в Go создан для опытных Golang-разработчиков (уровня Middle и Senior), а также для специалистов, переходящих на Go из других бэкенд-стеков (Ruby, Java, PHP, Python, C++ и др.). Программа обучения сфокусирована на глубоком погружении в «подкапотную» часть многопоточного программирования, позволяя систематизировать знания, заполнить пробелы в базовых концепциях и освоить продвинутые техники высоконагруженной разработки.
Курс предлагает уникальный формат обучения: вместо разрозненного изучения теории вы проходите через сквозной проект, в рамках которого самостоятельно разрабатываете In-memory key-value базу данных с поддержкой асинхронной репликации. Такой подход позволяет на практике отработать все изученные примитивы синхронизации, алгоритмы и паттерны конкурентных вычислений. Вы научитесь разбираться во внутреннем устройстве горутин и планировщика Go, поймете принципы работы контекстов, барьеров памяти и каналов, а также освоите написание lock-free структур данных.
Почему стоит выбрать этот курс? Во-первых, он закрывает потребность в получении опыта HighLoad-разработки, если текущие рабочие задачи ограничены простыми CRUD-операциями. Во-вторых, вы быстро разберете лучшие практики и антипаттерны, что критически важно для работы в инфраструктурных проектах. В-третьих, курс дает глубокое понимание архитектуры компьютера, операционной системы и того, как именно выполняется код на уровне процессора. Вы научитесь писать параллельный код, эффективно управлять ресурсами и избегать типичных ошибок, таких как deadlock, livelock или data race.
На выходе вы получите не только теоретическую базу, но и готовый проект для портфолио, а также уверенность в решении сложных задач на собеседованиях. Весь материал представлен на понятном языке, избавляя вас от необходимости тратить время на самостоятельный поиск информации в десятках книг. Это комплексное решение для тех, кто хочет выйти на новый уровень профессионального мастерства в экосистеме Go.
Программа обучения
Основы исполнения программного кода Горутины и планировщик Go Примитивы синхронизации: часть 1 Примитивы синхронизации: часть 2 Каналы и их внутреннее устройство Паттерны использования каналов Контексты и барьеры памяти Алгоритмы синхронизации и lock-free структуры данных Паттерны конкурентных вычислений Практическое использование конкурентных вычислений
Спойлер: Программа подробно: Основы исполнения программного кода Виртуальная память MMU TLB Swapping Закон Мура Прерывания Векторизация Тракт данных Hyper-threading Context switching Процессы и потоки Pipeline процессора Process memory layout Concurrency vs parallelism Когерентность кэшей (MESI) Примитивное устройство процессора и шина Кооперативная и вытесняющая многозадачность Сопрограммы – корутины, горутины, файберы, green threads
Горутины и планировщик Go Внутреннее устройство горутины Context switching горутин Контекст и состояние горутины Расширение стэка (contiguous и segmented) Паники с горутинами Внутреннее устройство планировщика Go Sysmon Handoff Netpoller LRQ и GRQ Asynchronous preemption Work sharing и work stealing Внутреннее устройство очередей Глобальная и локальные очереди runtime.Goshed() и runtime.Goexit() runtime.LockOSThread() GMP модель
Примитивы синхронизации: часть 1 Примитивы синхронизации sync.WaitGroup sync.Mutex sync.Once Проблемы конкурентного программирования deadlock livelock data race starvation инверсия приоритетов Распространенные ошибки Локальные мьютексы Копирование примитивов синхронизации Некорректное использование defer с мьютексами Неправильное проектирование синхронизированной структуры данных Рекурсивная блокировка Wait queue Normal / starvation mode Устройство мьютексов в Golang Реализация синхронизированного синглтона Go race detector Диаграммы Холта
Примитивы синхронизации: часть 2 Примитивы синхронизации sync.RWMutex sync.Map sync.Cond sync.Pool Атомики Реализации примитивов синхронизации Реализация spin lock Реализация ticket lock Реализация мьютекса Петерсона Реализация примитивного мьютекса Реализация recursive mutex Реализация timed mutex Реализация rw mutex Реализация семафора Реализация pool Реализация once CAS паттерны True sharing Busy waiting False sharing Spurious wakeup Cache contention Внутреннее устройство sync.Map Внутреннее устройство sync.Pool Внутреннее устройство sync.Mutex Внутреннее устройство мьютексов ядра Linux
Каналы и их внутреннее устройство Каналы в Golang Однонаправленные каналы Правильное закрытие каналов Внутреннее устройство каналов Приоритизация case-ов в select-e Ошибки неправильного использования каналов Буферизованные и небуферизованные каналы Неблокирующие запись и чтение с каналами Операторы break и continue с select-ом Share memory by communicating Проверка канала на закрытие Копирование каналов Deadlock с каналами Сравнение каналов Каналы каналов Утечки горутин Nil каналы Примеры использования каналов Коммуникация между горутинами Signal и broadcast на каналах Gracefull Shutdown на каналах Producer and consumer
Паттерны использования каналов Bridge Pipeline Generator Or channel Transformer Moving later Done channel Or-done channel Promise и Future Fan-In, Fan-Out и Tee Gracefull shutdown на каналах Рефлексия при работе с каналами Реализация Error group на каналах Реализация Rate limiter на каналах Реализация Single flight на каналах Реализация Semaphore на каналах Реализация Barrier на каналах Реализация Promise на каналах Реализация Future на каналах Работа со временем time.Ticker time.Timer time.After() и time.Tick() Выполнение запроса с таймаутом
Контексты и барьеры памяти Контексты context.TODO() context.Background() context.WithCancel() context.WithCancelCause() context.WithoutCancel() context.WithDeadline() context.WithDeadlineCause() context.WithTimeout() context.WithTimeoutCause() context.WithValue() Внутреннее устройство контекстов Антипаттерны использования контекстов Утечки горутин при работе с контекстами Собственная реализация context.WithTimeout() Gracefull shutdown на контекстах Memory reordering Error group Барьеры памяти полный барьер барьер чтения барьер записи acquire барьер release барьер
Алгоритмы синхронизации и lock-free структуры данных Шардирование структур данных RCU (Read Copy Update) Алгоритмы синхронизации грубая тонкая оптимистичная неблокирующая Lock-free структуры данных Стэк Трайбера Очередь Майкла и Скотта ABA проблема hazard pointers tagged pointers
Паттерны конкурентных вычислений Изоляция транзакций в базах данных 2PL подход MVCC подход Сериализуемость Закон Амдала Акторная модель
Практическое использование конкурентных вычислений Live-coding: реализация worker pool реализация синхронизатора кэша реализация scheduler реализация batcher
Теги курса
Другие материалы автора 12
ВБ Владимир Балун Все материалыОтзывов пока нет. Будьте первым!
Этот курс сейчас в процессе организации складчины. Нажмите кнопку «Записаться» и ожидайте старта — вам придёт уведомление. Когда складчина стартует, в карточке курса будет указан актуальный взнос. Текущая цена пока в процессе формирования и может отличаться от финальной.
Да, мы стремимся, чтобы финальный взнос был не больше ≈10% от оригинальной цены курса. Чем больше участников записывается в складчину, тем ниже выходит взнос для каждого.
Нажмите кнопку «Записаться» и авторизуйтесь на сайте через email (через ту же почту, которую будете использовать для входа). В личном кабинете вас будут ждать инструкции, как пригласить других участников — чем больше людей записалось, тем быстрее стартует складчина и тем ниже взнос. Как только складчина готова к приобретению, вам придёт уведомление.