Почему считается неправильным называть корутины легковесными потоками

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

Ответ

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

Ключевые отличия:

  • Потоки — управляются ОС, требуют больше ресурсов (стек, контекст переключения).
  • Корутины — выполняются в потоке, переключаются без затрат ОС, используют suspend-функции для неблокирующих пауз.

Пример:

// Легковесная корутина (не поток!)
GlobalScope.launch {
    delay(1000) // Не блокирует поток
    println("Done")
}

Название "легковесные потоки" вводит в заблуждение, так как корутины — это абстракция над асинхронным кодом, а не замена потоков.