Теория и практика многопоточной синхронизации
Содержание
Общие сведения
- Семестр: 4 (второй курс)
- Форма контроля: дифф. зачет
Преподаватели
- Лектор
- Липовский Роман
- Семинаристы
- Александр Гришутин
- Дмитрий Инютин
- Евгений Госткин
- Евгений Шлыков
- Камиль Талипов
- Мария Феофанова
- Никита Михайлов
- Роман Санду
- Степан Калинин
- Вадим Плахтинский
- Михаил Анухин
- Ассистенты
- Дмитрий Гусев
- Фёдор Букреев
- Юлия Акжигитова
- Роман Понасенко
- Кирилл Гросул
- Роман Климовицкий
- Роман Гуров
- Александр Харитонов
- Сергей Григорянц
- Дмитрий Ладин
- Анастасия Горбунова
- Алексей Пономарев
- Александр Якунин
- Екатерина Шайдурова
План курса
Темы лекций и семинаров:
- Introduction
- Взаимное исключение
- Механика потоков
- Мелкогранулярные блокировки
- Когерентность кэшей
- Модели памяти - I
- Moдели памяти - II
- Futures / Promises
- Лок-фри
- Планировщик / Work stealing
- Coroutines [в С++] - I
- Coroutines [в С++] - II
- ?
- Final
Критерии получения оценки
Домашние задания В ходе семестра вам будет предложено X домашних заданий, в каждом задании будет несколько задач.
Стоимости
У каждой задачи будет своя стоимость в баллах. У каждого домашнего задания (и иногда – у отдельных задач) будет дедлайн, после которого стоимость задач снижается.
Лимиты
У каждого домашнего задания будет лимит в баллах. Иногда он будет равен сумме баллов за отдельные задачи, а иногда суммарная стоимость задач будет чуть выше, чтобы можно было добирать баллы после дедлайна.
Дедлайны
Стандартный дедлайн на домашнее задание – 2 недели. После дедлайна в течение недели стоимость задач линейно падает в два раза. После этого стоимость задачи не меняется. Домашние задания будут наслаиваться друг на друга, будьте к этому готовы и планируйте свое время. Не оставляйте решение домашнего задания на последние выходные перед дедлайном!
Защита
Чтобы задача была зачтена, мало написать код и пройти тесты, нужно защитить задачу. Формат защиты остается на усмотрение семинариста, но в самом общем виде процедуру можно описать так: семинарист атакует вас каверзными вопросами на понимание тонкостей задачи и решает, достаточно ли вашего понимания или нет. На защиту тоже устанавливается дедлайн. Сделано это для того, чтобы:
- Нагрузка на семинаристов и ассистентов распределялась равномерно в течение семестра
- Вы не успевали забывать решения собственных задач
Базовая оценка
В конце семестра баллы за все домашние задания суммируются, после чего результат нормируется в базовую оценку от 0 до 8 баллов. Точные правила округления будут известны во второй половине семестра, но можно сказать сразу, что выбить 8 баллов на этом этапе будет крайне сложно, для этого придется прорешивать почти все домашние задания.
Обязательные задачи
Некоторые домашние работы и отдельные задачи будут обязательными для получения зачета. Дедлайна на защиту для них не будет. Но помните, что если вы решите сдавать их в самом конце семестра, то семинарист может физически не успеть проверить их. В этот момент приоритет будет отдаваться студентам, которые претендуют на более высокие оценки.
Список рекомендуемых материалов
- Intro
- Fibers
- Корутина
- Distinguishing coroutines and fibers.
- Гор Нишанов, C++ Coroutines – a negative overhead abstraction
- A library of C++ coroutine abstractions for the coroutines TS
- Project Loom with Ron Pressler and Alan Bateman
- Project Loom: Fibers and Continuations for the Java Virtual Machine
- ForkJoinPool – планировщик (Java)
- Kotlin Coroutines Proposal
- KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov
- Генераторы
- Iteration Inside and Out
- Concurrent Programming with Futures
- Folly Futures
- C++ Coroutines: Understanding operator co_await
- Using a timer asynchronously.
- Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility