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)