Теория и практика многопоточной синхронизации: различия между версиями

Материал из Public ATP Wiki
Перейти к навигации Перейти к поиску
Полностью удалено содержимое страницы
 
(не показаны 4 промежуточные версии 2 участников)
Строка 1: Строка 1:
= Общие сведения =
* Семестр: 4 (второй курс)
* Форма контроля: дифф. зачет


= Преподаватели =
* '''Лектор'''
** Липовский Роман
* '''Семинаристы'''
** Александр Гришутин
** Дмитрий Инютин
** Евгений Госткин
** Евгений Шлыков
** Камиль Талипов
** Мария Феофанова
** Никита Михайлов
** Роман Санду
** Степан Калинин
** Вадим Плахтинский
** Михаил Анухин
* '''Ассистенты'''
** Дмитрий Гусев
** Фёдор Букреев
** Юлия Акжигитова
** Роман Понасенко
** Кирилл Гросул
** Роман Климовицкий
** Роман Гуров
** Александр Харитонов
** Сергей Григорянц
** Дмитрий Ладин
** Анастасия Горбунова
** Алексей Пономарев
** Александр Якунин
** Екатерина Шайдурова
= План курса =
Темы лекций и семинаров:
# Introduction
# Взаимное исключение
# Механика потоков
# Мелкогранулярные блокировки
# Когерентность кэшей
# Модели памяти - I
# Moдели памяти - II
# Futures / Promises
# Лок-фри
# Планировщик / Work stealing
# Coroutines [в С++] - I
# Coroutines [в С++] - II
# ?
# Final
= Критерии получения оценки =
Домашние задания
В ходе семестра вам будет предложено X домашних заданий, в каждом задании будет несколько задач.
'''Стоимости'''
У каждой задачи будет своя стоимость в баллах.
У каждого домашнего задания (и иногда – у отдельных задач) будет дедлайн, после которого стоимость задач снижается.
'''Лимиты'''
У каждого домашнего задания будет лимит в баллах. Иногда он будет равен сумме баллов за отдельные задачи, а иногда суммарная стоимость задач будет чуть выше, чтобы можно было добирать баллы после дедлайна.
'''Дедлайны'''
Стандартный дедлайн на домашнее задание – 2 недели. После дедлайна в течение недели стоимость задач линейно падает в два раза. После этого стоимость задачи не меняется.
Домашние задания будут наслаиваться друг на друга, будьте к этому готовы и планируйте свое время.
Не оставляйте решение домашнего задания на последние выходные перед дедлайном!
'''Защита'''
Чтобы задача была зачтена, мало написать код и пройти тесты, нужно защитить задачу.
Формат защиты остается на усмотрение семинариста, но в самом общем виде процедуру можно описать так: семинарист атакует вас каверзными вопросами на понимание тонкостей задачи и решает, достаточно ли вашего понимания или нет.
На защиту тоже устанавливается дедлайн. Сделано это для того, чтобы:
* Нагрузка на семинаристов и ассистентов распределялась равномерно в течение семестра
* Вы не успевали забывать решения собственных задач
'''Базовая оценка'''
В конце семестра баллы за все домашние задания суммируются, после чего результат нормируется в базовую оценку от 0 до 8 баллов.
Точные правила округления будут известны во второй половине семестра, но можно сказать сразу, что выбить 8 баллов на этом этапе будет крайне сложно, для этого придется прорешивать почти все домашние задания.
'''Обязательные задачи'''
Некоторые домашние работы и отдельные задачи будут обязательными для получения зачета.
Дедлайна на защиту для них не будет. Но помните, что если вы решите сдавать их в самом конце семестра, то семинарист может физически не успеть проверить их. В этот момент приоритет будет отдаваться студентам, которые претендуют на более высокие оценки.
= Список рекомендуемых материалов =
* Intro
** [https://deadlockempire.github.io/ Игра-тренировка Deadlock Empire]
** [https://github.com/chriskohlhoff/asio/ Asio]
** [http://think-async.com/Asio/asio-1.12.2/doc/asio/overview/core/basics.html Basic Asio Anatomy]
** [https://www.youtube.com/watch?v=D-lTwGJRx0o Thinking Asynchronously: Designing Applications with Boost.Asio], [http://cpp.mimuw.edu.pl/files/boost_vs_qt/asio/thinking_asynchronously.pdf слайды]
** [https://web.archive.org/web/20160714182232/https://www3.nd.edu/~dthain/courses/cse40243/fall2015/intel-intro.html Introduction to X86-64 Assembly for Compiler Writers]
** [https://manybutfinite.com/post/journey-to-the-stack/ Journey to the Stack]
** [https://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64/ Stack frame layout on x86-64]
* Mutex
** [https://eli.thegreenplace.net/2018/basics-of-futexes/ Basics of Futexes]
** [https://www.microsoft.com/en-us/research/uploads/prod/2019/04/fork-hotos19.pdf A fork() in the road]
* Condvar
** [https://preshing.com/20150316/semaphores-are-surprisingly-versatile/ Semaphores are Surprisingly Versatile]
** [http://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf Little book of semaphores]
* Fibers
** [https://www.boost.org/doc/libs/1_60_0/libs/coroutine/doc/html/coroutine/intro.html Корутина]
** [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4024.pdf Distinguishing coroutines and fibers.]
** [https://www.youtube.com/watch?v=Ts-1mWBmTNE Гор Нишанов, C++ Coroutines – a negative overhead abstraction]
** [https://github.com/lewissbaker/cppcoro A library of C++ coroutine abstractions for the coroutines TS]
** [https://www.youtube.com/watch?v=J31o0ZMQEnI Project Loom with Ron Pressler and Alan Bateman]
** [http://cr.openjdk.java.net/~rpressler/loom/Loom-Proposal.html Project Loom: Fibers and Continuations for the Java Virtual Machine]
** [https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html ForkJoinPool – планировщик (Java)]
** [https://github.com/Kotlin/KEEP/blob/master/proposals/coroutines.md Kotlin Coroutines Proposal]
** [https://www.youtube.com/watch?v=_hfBv0a09Jc KotlinConf 2017 - Introduction to Coroutines by Roman Elizarov]
** [https://jeffknupp.com/blog/2013/04/07/improve-your-python-yield-and-generators-explained/ Генераторы]
** [https://journal.stuffwithstuff.com/2013/01/13/iteration-inside-and-out/ Iteration Inside and Out]
** [https://twitter.github.io/finagle/guide/Futures.html Concurrent Programming with Futures]
** [https://github.com/facebook/folly/blob/master/folly/docs/Futures.md Folly Futures]
** [https://lewissbaker.github.io/2017/11/17/understanding-operator-co-await C++ Coroutines: Understanding operator co_await]
** [http://think-async.com/Asio/asio-1.12.2/doc/asio/tutorial/tuttimer2.html Using a timer asynchronously.]
** [https://blog.acolyer.org/2015/11/23/hashed-and-hierarchical-timing-wheels/ Hashed and Hierarchical Timing Wheels: Data Structures for the Efficient Implementation of a Timer Facility]
* Futures
** [http://think-async.com/Asio/asio-1.16.0/doc/asio/overview/core/strands.html Strands: Use Threads Without Explicit Locking]
** [https://monkey.org/~marius/funsrv.pdf Marius Eriksen – Your Server as a Function]
** [https://www.youtube.com/watch?v=UL3TtTgt3oU CppCon 2017: Gor Nishanov “Naked coroutines live (with networking)”]
** [https://engineering.fb.com/developer-tools/futures-for-c-11-at-facebook/ Futures for C++11 at Facebook]
** [http://aturon.github.io/blog/2016/08/11/futures/ Zero-cost futures in Rust]
** [http://aturon.github.io/blog/2016/09/07/futures-design/ Designing futures for Rust]

Текущая версия от 14:26, 17 марта 2026