TODO: когда планирование будет завершено, влить этот документ в README.md
.
TODO: разрешить все TODO в документе.
TODO: составить список рекомендуемой литературы и ресурсов.
TODO: подготовить домашние задания и план по их проверке (автоматизация?).
TODO: напиши меня.
Теги курса: go
, golang
, concurrecy
, parallelism
, synchronization
, web-servers
.
TODO: нормально разбить материал по занятиям. Сейчас всё не очень сбалансировано.
План занятий:
- Виды параллелизма, связанные с параллелизмом проблемы и как мы решаем их в Go.
- Параллельно vs асинхронно.
- Параллелизм на уровне процессоров.
- Параллелизм через OS threads.
- OS threads дорогие => green threads и подобные.
- Проблема: data races.
- Проблема: deadlocks.
- Синхронизация.
- Параллелизм через CSP (в интерпретации Go).
- Каналы как примитив синхронизации.
- TODO: more?
- Введение в язык Go.
- Краткая история возникновения языка, основы идеологии.
- Встроенные числовые типы.
- Массивы.
- Слайсы и их отличия от массивов.
- Строки и как они соотносятся с
[]byte
. - Maps.
- Структуры.
- Функции vs методы.
- Пакеты
strings
иbytes
. - Интерфейсы.
- Пакет
io
и то, как он утилизирует концепцию интерфейсов.
- Написание веб-сервера на Go.
- TODO: more.
- Продвинутые паттерны в асинхронных приложениях и алгоритмах.
- lock-free алгоритмы (с парой примеров).
- Atomic операции.
- Лимитирование параллелизма (через семафоры/каналы).
- Broadcast.
- TODO: more.
- Как в Go работают "горутины".
- Что такое runtime.
- Что такое scheduller.
- Preemption points, как оно работает в Go, какие у этого проблемы.
- Поверхностно о распределении работы (job stealing).
- Отладка высокопараллельных программ, как уменьшить сложность системы.
- TODO: more.
Тестирование, профилирование и прочее, что важно для Go программистов, но напрямую не связано с темой параллелизма, лучше вынести в дополнительные материалы и/или домашние задания.