Skip to content

Latest commit

 

History

History
63 lines (51 loc) · 3.24 KB

plan.md

File metadata and controls

63 lines (51 loc) · 3.24 KB

План курса

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?
  2. Введение в язык Go.
    • Краткая история возникновения языка, основы идеологии.
    • Встроенные числовые типы.
    • Массивы.
    • Слайсы и их отличия от массивов.
    • Строки и как они соотносятся с []byte.
    • Maps.
    • Структуры.
    • Функции vs методы.
    • Пакеты strings и bytes.
    • Интерфейсы.
    • Пакет io и то, как он утилизирует концепцию интерфейсов.
  3. Написание веб-сервера на Go.
    • TODO: more.
  4. Продвинутые паттерны в асинхронных приложениях и алгоритмах.
    • lock-free алгоритмы (с парой примеров).
    • Atomic операции.
    • Лимитирование параллелизма (через семафоры/каналы).
    • Broadcast.
    • TODO: more.
  5. Как в Go работают "горутины".
    • Что такое runtime.
    • Что такое scheduller.
    • Preemption points, как оно работает в Go, какие у этого проблемы.
    • Поверхностно о распределении работы (job stealing).
  6. Отладка высокопараллельных программ, как уменьшить сложность системы.
    • TODO: more.

Тестирование, профилирование и прочее, что важно для Go программистов, но напрямую не связано с темой параллелизма, лучше вынести в дополнительные материалы и/или домашние задания.