concurrent-go/plan.md

61 lines
3.1 KiB
Markdown
Raw Normal View History

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