Hardcoroutines
Что такое coroutines (co_await/co_yield/co_return)?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Coroutines (C++20) — функции, которые могут приостанавливаться и возобновляться. co_await ждёт асинхронную операцию, co_yield возвращает значение и приостанавливается (generator), co_return завершает корутину.
// Генератор: лениво выдаёт значения
Generator<int> range(int start, int end) {
for (int i = start; i < end; ++i) {
co_yield i; // возвращает i, приостанавливается
}
}
for (int x : range(0, 5)) { // возобновляется при каждом ++
std::cout << x;
}- Корутины не запускаются в отдельном потоке — кооперативная асинхронность, эффективная для I/O;
- Компилятор преобразует корутину в state machine, состояние в heap (через
promise_type); - Применение: async I/O (network, file), generators, state machines.
До C++20 — библиотечные реализации (Boost.Asio, cppcoro).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.