Как корутины устроены под капотом

«Как корутины устроены под капотом» — вопрос из категории Coroutines и Flow, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Корутины в Kotlin — это легковесные потоки, работающие поверх JVM. Они выполняются в рамках существующих потоков, используя механизм suspend-функций и continuation passing style (CPS).

Как это работает:

  1. Suspend-функции компилятор преобразует в конечный автомат с Continuation.
  2. При вызове suspend-функции корутина может быть приостановлена (suspendCoroutine), а позже возобновлена (resume).
  3. Dispatchers определяют, на каком потоке выполняется корутина (Main, IO, Default).

Пример:

suspend fun fetchData(): String {
    delay(1000)  // suspend-функция
    return "Data"
}

Под капотом:

  • delay приостанавливает корутину, сохраняя состояние в Continuation.
  • После завершения delay корутина возобновляется с сохранённым контекстом.

Корутины эффективнее потоков, т.к. не блокируют потоки и минимизируют накладные расходы.