Бакалавриат
2021/2022
Теория и практика многопоточной синхронизации
Лучший по критерию «Полезность курса для Вашей будущей карьеры»
Лучший по критерию «Полезность курса для расширения кругозора и разностороннего развития»
Лучший по критерию «Новизна полученных знаний»
Статус:
Курс по выбору (Прикладная математика и информатика)
Направление:
01.03.02. Прикладная математика и информатика
Где читается:
Факультет компьютерных наук
Когда читается:
3-й курс, 3, 4 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Преподаватели:
Липовский Роман Германович
Язык:
русский
Кредиты:
6
Контактные часы:
80
Программа дисциплины
Аннотация
Курс посвящен теоретическим и практическим аспектам concurrency, включая многопоточное программирование. В курсе рассматриваются механика переключения контекста, планирование потоков в операционной системе и файберов в рантаймах языков программирования, запись в общие ячейки памяти внутри процессоров, когерентность кэшей, железные и аксиоматические модели памяти, многопоточные структуры данных и техники синхронизации, управление памятью в многопоточных структурах данных, конкурентные аллокаторы и сборка мусорка, изоляция транзакций в базах данных.
Цель освоения дисциплины
- Изучить основные выразительные средства асинхронного программирования (файберы, futures/promises, корутины)
- Сориентировать студента в подходах, которые применяются для работы с concurrency/асинхронностью в современных ЯП (C++, Golang, Rust, Java, Kotlin)
- Изучить инженерную сторону конкурентности: механика исполнения потоков, механика корутин, реализация моделей памяти, когерентность кэшей процессора и т.п.
- Познакомить студента с техниками тестирования и верификации конкурентных программ (sanitizers, fault injection, model checking)
- Научить студента проводить формальные рассуждения о корректности синхронизации с помощью гарантий моделей памяти.
Планируемые результаты обучения
- Студент владеет базовыми инструментами синхронизации потоков, как блокирующими (мьютексы/спинлоки/кондвары), так и неблокирующими (lock-free)
- Студент владеет современными инструментами тестирования и верификации многопоточного кода, может доказывать корректность программ с помощью моделей памяти.
- Студент понимает низкоуровневую механику конкурентного исполнения
- Студент умеет писать современный конкурентный код с помощью файберов, futures/promises, корутин
Содержание учебной дисциплины
- Введение
- Взаимное исключение
- Механика потоков
- Когерентность кэшей
- Модели памяти
- Futures/Promises
- Non-blocking synchronization
- Устройство планировщика
- Корутины (Сопрограммы)
- Сравнение современных подходов к concurrency в различных языках программирования: C++, Golang, Java, Kotlin, Rust.
- Конкурентная сборка мусора | Сила атомарных операций, задача консенсуса и consensus number для атомарных операций, wait-free иерархия.
Промежуточная аттестация
- 2021/2022 учебный год 4 модуль0.5 * Домашние задания + 0.5 * Домашние задания
Список литературы
Рекомендуемая основная литература
- Shalev, O., & Shavit, N. (2006). Split-Ordered Lists: Lock-Free Extensible Hash Tables. Journal of the ACM, 53(3), 397–405.
Рекомендуемая дополнительная литература
- Paul E. Mckenney. (2010). Memory Barriers: a Hardware View for Software Hackers. Http://Www.Rdrop.Com/Users/Paulmck/Scalability/Paper/Whymb.2010.06.14a.Pdf.