• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
Бакалавриат 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.