Ответ
Корутины можно приостанавливать благодаря механизму suspend-функций и Continuation Passing Style (CPS) под капотом. Когда корутина встречает suspend вызов, она сохраняет свое состояние (локальные переменные, точка остановки) в объекте Continuation и освобождает поток. После завершения suspend-операции (например, сетевого запроса) выполнение возобновляется с сохраненной точки.
Пример:
suspend fun fetchData(): String {
delay(1000) // suspend-функция
return "Data loaded"
}
Здесь delay() приостанавливает корутину без блокировки потока. Компилятор преобразует suspend-функции в конечный автомат с точками возобновления.