• A
  • A
  • A
  • АБB
  • АБB
  • АБB
  • А
  • А
  • А
  • А
  • А
Обычная версия сайта
2024/2025

Многопоточное программирование

Статус: Маго-лего
Когда читается: 1, 2 модуль
Охват аудитории: для своего кампуса
Язык: русский
Кредиты: 6
Контактные часы: 48

Программа дисциплины

Аннотация

В ходе программы студенты научатся разрабатывать и перерабатывать многопоточные приложения на С++ на примере аутентичных задач, выполняемых разработчиками в реальной жизни. Студенты изучат виды многозадачности, будут понимать причины возникновения проблем при разработке многопоточных приложений и способы их решения, будут знать, как устроена модель памяти C++ многопоточных приложений, а также виды примитивов синхронизации. Обучающиеся получат навыки отладки многопоточных приложений, научатся оценивать производительность приложений, находить узкие места в работе многопоточных приложений с помощью различных инструментов и исправлять их.
Цель освоения дисциплины

Цель освоения дисциплины

  • В ходе обучения студенты изучат виды многозадачности, будут понимать причины возникновения проблем при разработке многопоточных приложений и способы их решения, будут знать, как устроена модель памяти C++ многопоточных приложений, а также виды примитивов синхронизации. Обучающиеся получат навыки отладки многопоточных приложений, научатся оценивать производительность приложений, находить узкие места в работе многопоточных приложений с помощью различных инструментов и исправлять их. В конце программы учащийся сможет разработать сервер инференса нейронных сетей.
Планируемые результаты обучения

Планируемые результаты обучения

  • Знать общие сведения о реализации сокетов в *nix подобных системах, методы их использования на примере обмена в составе модели OSI
  • Знать способы реализации чтения/записи в сокет (блокирующий, неблокирующий)
  • Уметь реализовывать простейшие сетевые асинхронные приложения на python
  • Уметь реализовывать блокирующий ввод/вывод на основе сокетов Беркли
  • Знает сведения об устройстве protobuf, видах сообщений, их представлении при передаче (в т.ч. сжатие) и при использовании.
  • Умеет писать .proto файлы, встраивать protobuf в сборку программы, использовать его в C++ и Python-коде
  • Умеет разрабатывать протоколы клиент-серверного взаимодействия
  • Знает общие сведения о возможностях *nix подобных систем для поддержки многопоточных приложений. Способы межпоточного взаимодействия.
  • Знает возможности стандартной библиотеки C++ для запуска и завершения потоков
  • Умеет использовать стандартную библиотеку C++ для многопоточной обработки данных
  • Знает режимы работы программ (системное и пользовательское время).
  • Знает виды примитивов синхронизации в *nix-подобных системах, способы их использования с помощью стандартной библиотеки C++
  • Умеет использовать профайлировку и инструментирование для оценки производительности приложений
  • Умеет использовать примитивы синхронизации стандартной библиотеки C++ для избежания гонок и упрощения многопоточного кода
  • Умеет использовать future-семантику для упрощения многопоточного кода
  • Умеет использовать thread sanitizer для поиска ошибок в многопоточном коде
  • Знает устройство *nix подобных систем в части поддержки асинхронного ввода/вывода
  • Умеет проектировать асинхронные приложения и использовать epoll для организации асинхронного ввода/вывода
  • Знает принцип работы кооперативной многоздачности (корутин), их виды
  • Умеет самостоятельно реализовывать stackfull-корутины
  • Умеет применять корутинные движки в реальных приложениях
  • Знает принцип создания новых процессов в *nix-подобных системах, прицнипы наследования данных от родительского процесса, CoW
  • Знает организацию межпроцессного взаимодействия - сигналы и shared memory
  • Умеет реализовывать межпроцессное взаимодействие для передачи задач в системе master/workers.
  • Знает принципы работы атомарных переменных.
  • Знает устройство кэша процессора и его взаимодействие с RAM. Общие сведения о модели памяти C++, отношение happends before
Содержание учебной дисциплины

Содержание учебной дисциплины

  • Блокирующий ввод/вывод в Unix системах. Сокеты Беркли. async на питоне.
  • Стандартизация протоколов общения. Архитектурное ревью.
  • Ускорение обработки запросов с помощью многопоточного исполнения. Потоки и процессы на уровне ОС.
  • Профайлировка - sys и user time. Пул потоков. Примитивы синхронизации на уровне ОС и в си: мьютексы и CV
  • Future семантика и отладка многопоточного кода
  • Профайлирование - пример с “медленными” клиентами
  • Корутины: stackfull stackless. Корутинный движок
  • Корутины C++20 и boost::coroutines
  • Воркерная модель организации блокирующего i/o. Shared memory
  • Атомарные переменные и барьеры памяти
Элементы контроля

Элементы контроля

  • блокирующий Коллоквиум 1
  • блокирующий Коллоквиум 2
  • блокирующий Проект часть 1
  • блокирующий Проект часть 2
  • блокирующий Экзамен
Промежуточная аттестация

Промежуточная аттестация

  • 2024/2025 2nd module
    0.1 * Коллоквиум 1 + 0.1 * Коллоквиум 2 + 0.3 * Проект часть 1 + 0.3 * Проект часть 2 + 0.2 * Экзамен
Список литературы

Список литературы

Рекомендуемая основная литература

  • UNIX: взаимодействие процессов : мастер - класс : пер. с англ., Стивенс, У., 2003
  • UNIX. Профессиональное программирование, Стивенс, У. Р., 2018
  • Современные операционные системы, Таненбаум, Э., 2018

Рекомендуемая дополнительная литература

  • Эффективный и современный С++ : 42 рекомендации по использованию С++11 и С++14: пер. с англ., Мейерс, С., 2019

Авторы

  • Романова Ирина Ивановна
  • Башун Владимир Владимирович