Перейти к содержимому

13. Как устроены корутины в C++ | Параллельное программирование 2026

Алексей Малов (лекции по программированию)

0:00 / 0:00

13. Как устроены корутины в C++ | Параллельное программирование 2026

494 просмотра · 3 нед. назад
Алексей Малов (лекции по программированию)
6,3 тыс. подписчиков
494 просмотра · 3 нед. назад
Курс "Параллельное программирование" специальность 09.03.04 "Программная инженерия", 3 курс. Про подготовку программистов в Институте iSpring здесь: https://ispring.institute/software-en... В этой лекции начинаем разбираться с сопрограммами (coroutines) в C++20 — от базовой идеи до того, что на самом деле создаёт компилятор. Сначала посмотрим, зачем вообще нужны корутины, чем они отличаются от обычных функций и почему позволяют писать асинхронный код без глубоко вложенных callback-ов. Разберём три ключевых оператора: co_await, co_yield и co_return. Затем перейдём к внутреннему устройству корутин в C++: что такое promise_type и зачем он нужен; как компилятор находит promise_type через std::coroutine_traits; что делают initial_suspend и final_suspend; как приостанавливать и возобновлять выполнение; что такое std::coroutine_handle; где сохраняются параметры и локальные переменные; как устроен coroutine frame; как результат co_return попадает в promise; как написать простейший объект Task; во что примерно компилятор превращает функцию-корутину. Главная цель первой части — убрать «магию» вокруг корутин и построить понятную модель их работы: Корутина = состояние + promise + coroutine_handle + код, который может выполняться по частям. После этой лекции будет гораздо проще понимать Task, генераторы, асинхронные библиотеки и более сложные сценарии с co_await. Лекция будет полезна C++-разработчикам, которые уже знакомы с функциями, объектами, временем жизни и базовыми принципами многопоточного программирования и хотят разобраться, как корутины C++20 работают изнутри. Полезные ссылки Слайды и задачи по этому курсу: https://github.com/alexey-malov/pc Мой Telegram для связи с подписчиками: https://t.me/vivid_coding Поддержать меня на Boosty: https://boosty.to/vivid-bw Тайм-коды 0:00 — Что такое корутины и для чего они нужны 21:49 — Ключевые слова co_await, co_yield, co_return 31:23 — Пример простейшей корутины 44:34 — coroutine_handle 57:10 — Внутреннее устройство корутины В заставке использована композиция "Папа может в Си" музыкального коллектива "Научно-технический рэп" (https://vk.com/nii_rap)