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