Обратная связь
– Изучите классическое создание дочерних процессов (через fork) и использование средств межпроцессного взаимодействия (IPC)
– Освоите различные способы создания многопоточного приложения (pthreads, std::thread, boost::thread), а также и более высокоуровневые средства распараллеливания (OpenMP, Intel TBB).
– Научитесь работать с сетью и контейнерами (STL, boost).
– Реализуете протокол HTTP для будущего веб-сервера.
Для освоения каждой темы вы выполните практические задания, а в финале сделаете самостоятельный проект.
В обоих случаях вы можете получить до 50 баллов, при пересчете в оценки баллы распределяются следующим образом:
– 0−39 «неудовлетворительно»,
– 40−49 «удовлетворительно»,
– 50−59 «хорошо»,
– 60–100 «отлично».
Цель курса — изучите основы многопоточного программирования и спроектируете веб-сервер.
C++ остается одним из основных языков разработки для программного обеспечения, в котором критична скорость работы, и используется для многопоточного программирования в сервисах, где нужно обеспечить параллельное выполнение кода. Это могут быть графические движки, системы для научных расчетов или высоконагруженные веб-сервера. Во всех этих случаях особенное внимание уделяется возможности параллельного выполнения задач. Например, почтовый поиск — пользователь желает что-то найти в своем почтовом ящике, он вводит запрос, который поступает на сервер и там исполняется. Этот сервис многопоточный, потому что на сервере «живет» довольно много пользователей и они все могут захотеть искать одновременно.
В течение семестра на практике изучите подходы к организации многозадачного кода и на примере модельных задач рассмотрите «подводные камни» в таких программах. Потренируетесь в реализации пула потоков — часто используемого в реальных приложениях подхода к организации конкурентного параллельного исполнения кода, а также попрактикуетесь в самостоятельной реализация корутин — подхода, который используется в разработке сетевых приложений и который скоро появится в стандарте C++.
К концу семестра разберетесь в особенностях разработки многозадачных приложений и сможете самостоятельно написать такой сервис.
Лекция №1
- Архетектура процессора, процессы, потоки
- Основные проблемы при написании многопоточного кода
4 часа 3 часа СР
Смешанное занятие №1
Blocking: Потоки, примитивы c++
- Memory Model
- Создание потоков
- Умные указатели
- Блокировки
- conditional_variable
4 часа 3 часа СР
Смешанное занятие №2
Blocking: Расширенные примитивы синхронизации
- shared_lock
- striped_lock
- future
4 часа 2 часа СР
Смешанное занятие №3
Blocking: Основные приемы проектирвания
- queues
- threadpool
- thread_local
- core_local
4 часа 3 часа СР
Смешанное занятие №4
Async: Сетевое программирование в Linux
- select
- epoll
- multithreading epoll
4 часа 1 часа СР
Смешанное занятие №5
Async: epoll в несколько потоков
- latency
- throughtput
- Проблемы и решения при работе с epoll в несколько потоков
4 часа 3 часа СР
Смешанное занятие №6
- coroutine basics
- stack based
- ucontext based
- stackless coroutine
4 часа 3 часа СР
Смешанное занятие №7
Async: развитие и применение корутин
- Как интегрировать coroutine с epoll
- Корутины в нескольких потоках
4 часа 3 часа СР
Смешанное занятие №12
- Отвечаем на вопросы
- Рассматриваем какие нибудь задачи
- Разбираемся в непонятных домашках
4 часа 3 часа СР
Смешанное занятие №13
- Отвечаем на вопросы
- Рассматриваем какие нибудь задачи
- Разбираемся в непонятных домашках
4 часа