Ответ
Корутины — это легковесные потоки, работающие на уровне языка (Kotlin). В отличие от потоков (Thread), которые создаются и управляются ОС, корутины выполняются в рамках существующих потоков и могут приостанавливаться без блокировки потока.
Основные отличия:
- Потоки дорогие (1 поток 1MB стека), корутины — легкие (несколько KB).
- Потоки блокируют поток при ожидании, корутины — приостанавливаются (
suspend). - Корутины упрощают асинхронный код (последовательный стиль).
Пример:
// Поток
Thread {
val data = fetchDataBlocking() // Блокирует поток
runOnUiThread { updateUI(data) }
}.start()
// Корутина
lifecycleScope.launch {
val data = fetchDataSuspend() // Не блокирует поток (suspend-функция)
updateUI(data) // Автоматически на главном потоке
}