2019-05-26 11:46:54 +03:00
|
|
|
|
# План курса
|
|
|
|
|
|
|
|
|
|
TODO: когда планирование будет завершено, влить этот документ в `README.md`.
|
|
|
|
|
|
2019-05-26 12:00:48 +03:00
|
|
|
|
TODO: разрешить все TODO в документе.
|
|
|
|
|
|
2019-05-26 13:24:20 +03:00
|
|
|
|
TODO: составить список рекомендуемой литературы и ресурсов.
|
|
|
|
|
|
2019-05-26 13:25:51 +03:00
|
|
|
|
TODO: подготовить домашние задания и план по их проверке (автоматизация?).
|
|
|
|
|
|
2019-05-26 12:18:24 +03:00
|
|
|
|
## Описание курса
|
|
|
|
|
|
|
|
|
|
TODO: напиши меня.
|
|
|
|
|
|
|
|
|
|
Теги курса: `go`, `golang`, `concurrecy`, `parallelism`, `synchronization`, `web-servers`.
|
|
|
|
|
|
2019-05-26 11:46:54 +03:00
|
|
|
|
## Структура
|
|
|
|
|
|
2019-05-26 12:00:48 +03:00
|
|
|
|
TODO: нормально разбить материал по занятиям. Сейчас всё не очень сбалансировано.
|
|
|
|
|
|
|
|
|
|
План занятий:
|
|
|
|
|
|
2019-05-26 13:28:32 +03:00
|
|
|
|
1. Виды параллелизма, связанные с параллелизмом проблемы и как мы решаем их в Go.
|
|
|
|
|
* Параллельно vs асинхронно.
|
|
|
|
|
* Параллелизм на уровне процессоров.
|
|
|
|
|
* Параллелизм через OS threads.
|
|
|
|
|
* OS threads дорогие => green threads и подобные.
|
|
|
|
|
* Проблема: data races.
|
|
|
|
|
* Проблема: deadlocks.
|
2019-05-26 12:06:10 +03:00
|
|
|
|
* Синхронизация.
|
2019-05-26 13:28:32 +03:00
|
|
|
|
* Параллелизм через CSP (в интерпретации Go).
|
|
|
|
|
* Каналы как примитив синхронизации.
|
|
|
|
|
* TODO: more?
|
2019-05-26 13:22:36 +03:00
|
|
|
|
1. Введение в язык Go.
|
2019-05-26 13:31:05 +03:00
|
|
|
|
* Краткая история возникновения языка, основы идеологии.
|
2019-05-26 13:22:36 +03:00
|
|
|
|
* Встроенные числовые типы.
|
|
|
|
|
* Массивы.
|
|
|
|
|
* Слайсы и их отличия от массивов.
|
|
|
|
|
* Строки и как они соотносятся с `[]byte`.
|
|
|
|
|
* Maps.
|
|
|
|
|
* Структуры.
|
|
|
|
|
* Функции vs методы.
|
|
|
|
|
* Пакеты `strings` и `bytes`.
|
|
|
|
|
* Интерфейсы.
|
|
|
|
|
* Пакет `io` и то, как он утилизирует концепцию интерфейсов.
|
2019-05-26 13:28:32 +03:00
|
|
|
|
1. Написание веб-сервера на Go.
|
|
|
|
|
* TODO: more.
|
|
|
|
|
1. Продвинутые паттерны в асинхронных приложениях и алгоритмах.
|
|
|
|
|
* lock-free алгоритмы (с парой примеров).
|
|
|
|
|
* Atomic операции.
|
|
|
|
|
* Лимитирование параллелизма (через семафоры/каналы).
|
|
|
|
|
* Broadcast.
|
|
|
|
|
* TODO: more.
|
2019-05-26 12:10:42 +03:00
|
|
|
|
1. Как в Go работают "горутины".
|
|
|
|
|
* Что такое runtime.
|
|
|
|
|
* Что такое scheduller.
|
|
|
|
|
* Preemption points, как оно работает в Go, какие у этого проблемы.
|
|
|
|
|
* Поверхностно о распределении работы (job stealing).
|
2019-05-26 13:28:32 +03:00
|
|
|
|
1. Отладка высокопараллельных программ, как уменьшить сложность системы.
|
|
|
|
|
* TODO: more.
|
2019-05-26 11:46:54 +03:00
|
|
|
|
|
|
|
|
|
> Тестирование, профилирование и прочее, что важно для Go программистов, но напрямую не связано с темой параллелизма,
|
|
|
|
|
лучше вынести в дополнительные материалы и/или домашние задания.
|