concurrent-go/plan.md

64 lines
3.2 KiB
Markdown
Raw Normal View History

# План курса
TODO: когда планирование будет завершено, влить этот документ в `README.md`.
TODO: разрешить все TODO в документе.
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`.
## Структура
TODO: нормально разбить материал по занятиям. Сейчас всё не очень сбалансировано.
План занятий:
2019-05-26 13:28:32 +03:00
1. Виды параллелизма, связанные с параллелизмом проблемы и как мы решаем их в Go.
* Параллельно vs асинхронно.
* Параллелизм на уровне процессоров.
* Параллелизм через OS threads.
* OS threads дорогие => green threads и подобные.
* Проблема: data races.
* Проблема: deadlocks.
* Синхронизация.
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: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.
> Тестирование, профилирование и прочее, что важно для Go программистов, но напрямую не связано с темой параллелизма,
лучше вынести в дополнительные материалы и/или домашние задания.