В чем разница между потоками и корутинами

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

Ответ

Корутины — это легковесные потоки, работающие на уровне языка (Kotlin). В отличие от потоков (Thread), которые создаются и управляются ОС, корутины выполняются в рамках существующих потоков и могут приостанавливаться без блокировки потока.

Основные отличия:

  • Потоки дорогие (1 поток 1MB стека), корутины — легкие (несколько KB).
  • Потоки блокируют поток при ожидании, корутины — приостанавливаются (suspend).
  • Корутины упрощают асинхронный код (последовательный стиль).

Пример:

// Поток
Thread {
    val data = fetchDataBlocking() // Блокирует поток
    runOnUiThread { updateUI(data) }
}.start()

// Корутина
lifecycleScope.launch {
    val data = fetchDataSuspend() // Не блокирует поток (suspend-функция)
    updateUI(data) // Автоматически на главном потоке
}