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