Почему поток тяжелее корутины

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

Ответ

Корутины легче потоков, потому что:

  1. Переключение контекста - у корутин оно происходит в пользовательском пространстве (без участия ОС), а у потоков - на уровне ядра (дорого).
  2. Память - каждый поток имеет свой стек (~1MB по умолчанию), корутины же используют общий пул потоков и легковесные объекты Continuation.
  3. Создание - запуск корутины это просто создание объекта, тогда как поток требует системных вызовов.

Пример с корутиной:

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