Теория и практика многопоточной синхронизации — различия между версиями
(Создание страницы «Теория и практика concurrency») |
VeLKerr (обсуждение | вклад) (→Преподаватели) |
||
(не показано 7 промежуточных версий 2 участников) | |||
Строка 2: | Строка 2: | ||
* Семестр: 4 (второй курс) | * Семестр: 4 (второй курс) | ||
* Форма контроля: дифф. зачет | * Форма контроля: дифф. зачет | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
= Преподаватели = | = Преподаватели = | ||
Строка 15: | Строка 8: | ||
* '''Семинаристы''' | * '''Семинаристы''' | ||
− | ** Александр | + | ** Анухин Михаил |
− | ** Дмитрий | + | ** Госткин Евгений |
− | ** | + | ** Гришутин Александр |
− | ** | + | ** Инютин Дмитрий |
− | ** Камиль | + | ** Калинин Степан |
− | ** Мария | + | ** Михайлов Никита |
− | ** | + | ** Плахтинский Вадим |
− | ** Роман | + | ** Санду Роман |
− | ** | + | ** Талипов Камиль |
− | ** | + | ** Феофанова Мария |
− | ** | + | ** Шлыков Евгений |
+ | |||
+ | * '''Ассистенты''' | ||
+ | ** Акжигитова Юлия | ||
+ | ** Букреев Фёдор | ||
+ | ** Горбунова Анастасия | ||
+ | ** Григорянц Сергей | ||
+ | ** Гросул Кирилл | ||
+ | ** Гуров Роман | ||
+ | ** Гусев Дмитрий | ||
+ | ** Климовицкий Роман | ||
+ | ** Ладин Дмитрий | ||
+ | ** Понасенко Роман | ||
+ | ** Пономарев Алексей | ||
+ | ** Харитонов Александр | ||
+ | ** Шайдурова Екатерина | ||
+ | ** Якунин Александр | ||
+ | |||
+ | * '''Автор wiki курса''' | ||
+ | ** Екатерина Шайдурова | ||
+ | |||
+ | = План курса = | ||
+ | Темы лекций и семинаров: | ||
+ | # Introduction | ||
+ | # Взаимное исключение | ||
+ | # Механика потоков | ||
+ | # Мелкогранулярные блокировки | ||
+ | # Когерентность кэшей | ||
+ | # Модели памяти - I | ||
+ | # Moдели памяти - II | ||
+ | # Futures / Promises | ||
+ | # Лок-фри | ||
+ | # Планировщик / Work stealing | ||
+ | # Coroutines [в С++] - I | ||
+ | # Coroutines [в С++] - II | ||
+ | # ? | ||
+ | # Final | ||
= Критерии получения оценки = | = Критерии получения оценки = | ||
− | Домашние задания | + | Оценка выставляется по сумме оценок за домашние задания и за зачёт. За домашние задания можно получить от 0 до 8 баллов. За зачёт от 0 до 2 баллов. Обязательным условием получения оценки за предмет является решение всех обязательных задач. |
+ | |||
+ | == Домашние задания == | ||
В ходе семестра вам будет предложено X домашних заданий, в каждом задании будет несколько задач. | В ходе семестра вам будет предложено X домашних заданий, в каждом задании будет несколько задач. | ||
− | + | === Стоимости === | |
− | |||
У каждой задачи будет своя стоимость в баллах. | У каждой задачи будет своя стоимость в баллах. | ||
У каждого домашнего задания (и иногда – у отдельных задач) будет дедлайн, после которого стоимость задач снижается. | У каждого домашнего задания (и иногда – у отдельных задач) будет дедлайн, после которого стоимость задач снижается. | ||
− | + | === Лимиты === | |
− | |||
У каждого домашнего задания будет лимит в баллах. Иногда он будет равен сумме баллов за отдельные задачи, а иногда суммарная стоимость задач будет чуть выше, чтобы можно было добирать баллы после дедлайна. | У каждого домашнего задания будет лимит в баллах. Иногда он будет равен сумме баллов за отдельные задачи, а иногда суммарная стоимость задач будет чуть выше, чтобы можно было добирать баллы после дедлайна. | ||
− | + | === Дедлайны === | |
− | + | Стандартный дедлайн на домашнее задание – 2 недели. После дедлайна в течение недели стоимость задач линейно падает в два раза. После этого стоимость задачи не меняется. Домашние задания могут наслаиваться друг на друга. | |
− | Стандартный дедлайн на домашнее задание – 2 недели. После дедлайна в течение недели стоимость задач линейно падает в два раза. После этого стоимость задачи не меняется. | ||
− | Домашние задания | ||
− | |||
− | |||
− | |||
+ | === Защита === | ||
Чтобы задача была зачтена, мало написать код и пройти тесты, нужно защитить задачу. | Чтобы задача была зачтена, мало написать код и пройти тесты, нужно защитить задачу. | ||
Формат защиты остается на усмотрение семинариста, но в самом общем виде процедуру можно описать так: семинарист атакует вас каверзными вопросами на понимание тонкостей задачи и решает, достаточно ли вашего понимания или нет. | Формат защиты остается на усмотрение семинариста, но в самом общем виде процедуру можно описать так: семинарист атакует вас каверзными вопросами на понимание тонкостей задачи и решает, достаточно ли вашего понимания или нет. | ||
Строка 54: | Строка 79: | ||
* Вы не успевали забывать решения собственных задач | * Вы не успевали забывать решения собственных задач | ||
− | + | === Базовая оценка === | |
− | |||
В конце семестра баллы за все домашние задания суммируются, после чего результат нормируется в базовую оценку от 0 до 8 баллов. | В конце семестра баллы за все домашние задания суммируются, после чего результат нормируется в базовую оценку от 0 до 8 баллов. | ||
Точные правила округления будут известны во второй половине семестра, но можно сказать сразу, что выбить 8 баллов на этом этапе будет крайне сложно, для этого придется прорешивать почти все домашние задания. | Точные правила округления будут известны во второй половине семестра, но можно сказать сразу, что выбить 8 баллов на этом этапе будет крайне сложно, для этого придется прорешивать почти все домашние задания. | ||
− | + | === Обязательные задачи === | |
− | |||
Некоторые домашние работы и отдельные задачи будут обязательными для получения зачета. | Некоторые домашние работы и отдельные задачи будут обязательными для получения зачета. | ||
Дедлайна на защиту для них не будет. Но помните, что если вы решите сдавать их в самом конце семестра, то семинарист может физически не успеть проверить их. В этот момент приоритет будет отдаваться студентам, которые претендуют на более высокие оценки. | Дедлайна на защиту для них не будет. Но помните, что если вы решите сдавать их в самом конце семестра, то семинарист может физически не успеть проверить их. В этот момент приоритет будет отдаваться студентам, которые претендуют на более высокие оценки. | ||
− | = | + | == Зачёт == |
− | + | Зачёт состоит из | |
− | + | * Небольшой задачи на написание кода и | |
− | + | * Развернутого ответа на теоретический вопрос | |
− | + | ||
− | + | === Задача === | |
− | + | Если вы решаете задачу, то зачет продолжается, если вы её не решаете, то зачёт завершается. Задача будет простой и неоригинальной. | |
− | + | ||
− | + | === Теоретический вопрос === | |
− | + | Ответ на теоретический вопрос оценивается преподавателем по шкале от 2 (неудовлетворительно) до 5 (отлично). Отличный ответ добавляет 2 балла к итоговой оценке, хороший --- 1 балл, удовлетворительный --- 0 баллов, а двойка умножает вашу итоговую оценку на 0. | |
− | + | ||
− | + | Можно сразу сказать, что без хорошего или отличного ответа на теоретический вопрос получить отличную оценку за курс будет почти невозможно. | |
− | + | ||
− | + | Теоретический вопрос требует развернутого ответа, который продемонстрирует глубокое понимание происходящего. | |
− | + | Вопросы теоритеческой части будут соответствовать большим частям отдельных лекций или даже целым лекциям. Разумеется, пересказывать на зачете целую лекцию не нужно, лекция строится по другим правилам. К зачету вы должны творчески переработать материал лекции и построить интенсивный 5-10 минутный рассказ, который содержит все существенные детали. При этом вы должны уметь углубиться в отдельные аспекты своего ответа. | |
− | + | ||
+ | Опция "выучить только определения" отсутствует в силу своей ущербности и бесполезности. | ||
+ | |||
+ | === Критерии оценки за теорию === | ||
+ | Отличный ответ подразумевает блестящее знание темы. Вы свободно ориентируетесь в ней, обладаете интуицией, отвечаете на каверзные дополнительные вопросы, в том числе и по смежным темам. | ||
+ | |||
+ | Другая крайность – неудовлетворительный ответ. Если вы не выучили билет или пытаетесь рассказать то, в чем сами не разбираетесь, то получаете заслуженную двойку. | ||
+ | |||
+ | === Можно другой билет? === | ||
+ | Нет, повторно тянуть билет нельзя. | ||
+ | |||
+ | = Материалы прошлых лет = | ||
+ | * 2020 год: | ||
+ | ** [https://gitlab.com/Lipovsky/tpcc-course-2020 Репозиторий курса] | ||
+ | ** [https://www.youtube.com/playlist?list=PL4_hYwCyhAvalRjpPlvaCYPpPE8TL-fn3 Видео лекций] | ||
+ | ** [https://www.youtube.com/playlist?list=PL4_hYwCyhAvY-mbXKJwKLLdafLrSOIgRN Видео семинаров] | ||
+ | * 2019 год: | ||
+ | ** [https://www.youtube.com/playlist?list=PL4_hYwCyhAvbW4DHFV3CY5CqupNqPf4jS Видео лекций] | ||
+ | ** [https://www.youtube.com/playlist?list=PL4_hYwCyhAvZgIfxf4nLnjXprGGWBs5VO Видео семинаров] | ||
= Список рекомендуемых материалов = | = Список рекомендуемых материалов = |
Текущая версия на 11:07, 30 июня 2020
Содержание
Общие сведения
- Семестр: 4 (второй курс)
- Форма контроля: дифф. зачет
Преподаватели
- Лектор
- Липовский Роман
- Семинаристы
- Анухин Михаил
- Госткин Евгений
- Гришутин Александр
- Инютин Дмитрий
- Калинин Степан
- Михайлов Никита
- Плахтинский Вадим
- Санду Роман
- Талипов Камиль
- Феофанова Мария
- Шлыков Евгений
- Ассистенты
- Акжигитова Юлия
- Букреев Фёдор
- Горбунова Анастасия
- Григорянц Сергей
- Гросул Кирилл
- Гуров Роман
- Гусев Дмитрий
- Климовицкий Роман
- Ладин Дмитрий
- Понасенко Роман
- Пономарев Алексей
- Харитонов Александр
- Шайдурова Екатерина
- Якунин Александр
- Автор wiki курса
- Екатерина Шайдурова
План курса
Темы лекций и семинаров:
- Introduction
- Взаимное исключение
- Механика потоков
- Мелкогранулярные блокировки
- Когерентность кэшей
- Модели памяти - I
- Moдели памяти - II
- Futures / Promises
- Лок-фри
- Планировщик / Work stealing
- Coroutines [в С++] - I
- Coroutines [в С++] - II
- ?
- Final
Критерии получения оценки
Оценка выставляется по сумме оценок за домашние задания и за зачёт. За домашние задания можно получить от 0 до 8 баллов. За зачёт от 0 до 2 баллов. Обязательным условием получения оценки за предмет является решение всех обязательных задач.
Домашние задания
В ходе семестра вам будет предложено X домашних заданий, в каждом задании будет несколько задач.
Стоимости
У каждой задачи будет своя стоимость в баллах. У каждого домашнего задания (и иногда – у отдельных задач) будет дедлайн, после которого стоимость задач снижается.
Лимиты
У каждого домашнего задания будет лимит в баллах. Иногда он будет равен сумме баллов за отдельные задачи, а иногда суммарная стоимость задач будет чуть выше, чтобы можно было добирать баллы после дедлайна.
Дедлайны
Стандартный дедлайн на домашнее задание – 2 недели. После дедлайна в течение недели стоимость задач линейно падает в два раза. После этого стоимость задачи не меняется. Домашние задания могут наслаиваться друг на друга.
Защита
Чтобы задача была зачтена, мало написать код и пройти тесты, нужно защитить задачу. Формат защиты остается на усмотрение семинариста, но в самом общем виде процедуру можно описать так: семинарист атакует вас каверзными вопросами на понимание тонкостей задачи и решает, достаточно ли вашего понимания или нет. На защиту тоже устанавливается дедлайн. Сделано это для того, чтобы:
- Нагрузка на семинаристов и ассистентов распределялась равномерно в течение семестра
- Вы не успевали забывать решения собственных задач
Базовая оценка
В конце семестра баллы за все домашние задания суммируются, после чего результат нормируется в базовую оценку от 0 до 8 баллов. Точные правила округления будут известны во второй половине семестра, но можно сказать сразу, что выбить 8 баллов на этом этапе будет крайне сложно, для этого придется прорешивать почти все домашние задания.
Обязательные задачи
Некоторые домашние работы и отдельные задачи будут обязательными для получения зачета. Дедлайна на защиту для них не будет. Но помните, что если вы решите сдавать их в самом конце семестра, то семинарист может физически не успеть проверить их. В этот момент приоритет будет отдаваться студентам, которые претендуют на более высокие оценки.
Зачёт
Зачёт состоит из
- Небольшой задачи на написание кода и
- Развернутого ответа на теоретический вопрос
Задача
Если вы решаете задачу, то зачет продолжается, если вы её не решаете, то зачёт завершается. Задача будет простой и неоригинальной.
Теоретический вопрос
Ответ на теоретический вопрос оценивается преподавателем по шкале от 2 (неудовлетворительно) до 5 (отлично). Отличный ответ добавляет 2 балла к итоговой оценке, хороший --- 1 балл, удовлетворительный --- 0 баллов, а двойка умножает вашу итоговую оценку на 0.
Можно сразу сказать, что без хорошего или отличного ответа на теоретический вопрос получить отличную оценку за курс будет почти невозможно.
Теоретический вопрос требует развернутого ответа, который продемонстрирует глубокое понимание происходящего. Вопросы теоритеческой части будут соответствовать большим частям отдельных лекций или даже целым лекциям. Разумеется, пересказывать на зачете целую лекцию не нужно, лекция строится по другим правилам. К зачету вы должны творчески переработать материал лекции и построить интенсивный 5-10 минутный рассказ, который содержит все существенные детали. При этом вы должны уметь углубиться в отдельные аспекты своего ответа.
Опция "выучить только определения" отсутствует в силу своей ущербности и бесполезности.
Критерии оценки за теорию
Отличный ответ подразумевает блестящее знание темы. Вы свободно ориентируетесь в ней, обладаете интуицией, отвечаете на каверзные дополнительные вопросы, в том числе и по смежным темам.
Другая крайность – неудовлетворительный ответ. Если вы не выучили билет или пытаетесь рассказать то, в чем сами не разбираетесь, то получаете заслуженную двойку.
Можно другой билет?
Нет, повторно тянуть билет нельзя.
Материалы прошлых лет
- 2020 год:
- 2019 год:
Список рекомендуемых материалов
- 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