Осень 2022

Многопоточное программирование на языке C/С++

Цель курса — Изучить основы многопоточного программирования и спроектировать сетевой сервер. Понять, как задействовать большую часть вычислительной мощности типичного програмно-аппаратного комплекса.

Описание
C++ остается одним из основных языков разработки для программного обеспечения, в котором критична скорость работы, и используется для многопоточного программирования в сервисах, где нужно обеспечить параллельное выполнение кода. Это могут быть графические движки, системы для научных расчетов или высоконагруженные веб-сервера. Во всех этих случаях особенное внимание уделяется возможности параллельного выполнения задач. Например, почтовый поиск — пользователь желает что-то найти в своем почтовом ящике, он вводит запрос, который поступает на сервер и там исполняется. Этот сервис многопоточный, потому что на сервере «живет» довольно много пользователей и они все могут захотеть искать одновременно. 

В течение семестра на практике изучишь подходы к организации многозадачного кода и на примере модельных задач рассмотришь «подводные камни» в таких программах. Потренируешься в реализации пула потоков — часто используемого в реальных приложениях подхода к организации конкурентного параллельного исполнения кода, а также попрактикуешься в самостоятельной реализация корутин — подхода, который используется в разработке сетевых приложений и который скоро появится в стандарте C++.
К концу семестра разберешься в особенностях разработки многозадачных приложений и сможешь самостоятельно написать такой сервис.
Подробнее
Чему научитесь
Подробнее

Преподаватели

Федор Петряйкин Федор Петряйкин

Программист C++, в основном занимаюсь проектами, где важна высокая производительность кода

Руслан Аллаяров Руслан Аллаяров

Программист-разработчик в поиске Mail.ru.
Занимаюсь оптимизацией поиска по видео и вебу.

Максим Намит Максим Намит

Младший программист-исследователь в отделе качества поиска. Работаю над улучшением качества поиск...


Подробнее

Программа

Занятие Часы в ауд. + сам. работа

Смешанное занятие №1: Входной контроль. Его разбор  

4 ак. ч.

Смешанное занятие №2: Архитектура процессора, процессы, потоки  

4 ак. ч.

Смешанное занятие №3: Инфраструктура разработки  
+ ДЗ №1

4 ак. ч.

Смешанное занятие №4: Динамическое распределение памяти. Copy/Move семантика  

4 ак. ч.

Смешанное занятие №5: Шаблоны. SFINAE  

4 ак. ч.

Смешанное занятие №6: STL. Внутреннее устройство контейнеров  

4 ак. ч.

Смешанное занятие №7: Отладка приложений  

4 ак. ч.

Рубежный контроль №1: Рубежный контроль 1  

4 ак. ч.

Смешанное занятие №8: Примитивы синхронизации в ОС. Средства синхронизации в С++ - мьютексы  

4 ак. ч.

Смешанное занятие №9: Пул потоков  

4 ак. ч.

Смешанное занятие №10: Модель памяти с++. Отношение happends before  

4 ак. ч.

Смешанное занятие №11: Оценка производительности приложений  

4 ак. ч.

Рубежный контроль №2: Рубежный контроль 2  

4 ак. ч.

Экзамен №1: Итоговый зачет  

4 ак. ч.