Ответ
Корутины называют легковесными, потому что они потребляют значительно меньше ресурсов по сравнению с потоками (Threads).
Основные причины:
- Нет накладных расходов на переключение контекста — корутины работают в рамках одного потока и переключаются кооперативно, а не вытеснительно.
- Минимальный стек — корутина занимает несколько десятков байт в памяти, тогда как поток требует выделения стека (обычно 1 МБ или больше).
- Эффективное использование потоков — тысячи корутин могут выполняться на небольшом числе потоков.
Пример:
fun main() = runBlocking {
repeat(100_000) { // Легко создаются тысячи корутин
launch {
delay(1000)
println(".")
}
}
}
Попытка создать столько потоков привела бы к OutOfMemoryError.