concurrent-go/plan.md
2019-05-26 13:31:05 +03:00

64 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# План курса
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 программистов, но напрямую не связано с темой параллелизма,
лучше вынести в дополнительные материалы и/или домашние задания.