За счет чего достигается легковесность корутин

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

Ответ

Корутины легковесны за счет:

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

Пример:

fun main() = runBlocking {
    repeat(100_000) { // Легко запустить 100К корутин
        launch {
            delay(1000L)
            print(".")
        }
    }
}
// С потоками такое невозможно из-за высокого потребления ресурсов