Ответ
Корутины в Kotlin — это легковесные потоки, работающие поверх JVM. Они выполняются в рамках существующих потоков, используя механизм suspend-функций и continuation passing style (CPS).
Как это работает:
- Suspend-функции компилятор преобразует в конечный автомат с
Continuation. - При вызове suspend-функции корутина может быть приостановлена (
suspendCoroutine), а позже возобновлена (resume). - Dispatchers определяют, на каком потоке выполняется корутина (Main, IO, Default).
Пример:
suspend fun fetchData(): String {
delay(1000) // suspend-функция
return "Data"
}
Под капотом:
delayприостанавливает корутину, сохраняя состояние вContinuation.- После завершения
delayкорутина возобновляется с сохранённым контекстом.
Корутины эффективнее потоков, т.к. не блокируют потоки и минимизируют накладные расходы.