|
|
| (не показаны 2 промежуточные версии 1 участника) |
| Строка 1: |
Строка 1: |
| − | = Общие сведения =
| |
| − | * Семестр: 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 год:
| |
| − | ** [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 Видео семинаров]
| |
| − |
| |
| − | = Список рекомендуемых материалов =
| |
| − | * 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]
| |