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 подскажет развёрнутый ответ в реальном времени.