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