Ответ
Корутины легче потоков, потому что:
- Переключение контекста - у корутин оно происходит в пользовательском пространстве (без участия ОС), а у потоков - на уровне ядра (дорого).
- Память - каждый поток имеет свой стек (~1MB по умолчанию), корутины же используют общий пул потоков и легковесные объекты Continuation.
- Создание - запуск корутины это просто создание объекта, тогда как поток требует системных вызовов.
Пример с корутиной:
GlobalScope.launch { // Легковесная корутина
delay(1000)
println("Done")
} Ответ 18+ 🔞
А, ну это вообще классика, блядь! Смотри, тут всё просто, как три копейки. Корутины — это вообще не потоки, это как бы... ну, ёпта, облегчённая версия, хитрая жопа такая.
Представь себе потоки — это как нанять отдельного грузчика на каждую коробку. Мужик свой, у него своя каска, своя тележка, свой обеденный перерыв. Создать его — овердохуища бумажной волокиты, он жрёт оперативки, как не в себя, и переключаться между ними — это ж целая история с начальником цеха (это ядро ОС, если что). Доверия ебать ноль, что он не сломает что-нибудь, пока ты спишь.
А корутины — это ты один мужик, но с суперспособностью. Ты везешь одну коробку, упираешься, думаешь: «Э, сабака сука, тут клей не высох». Вместо того чтобы стоять и тупить, ты говоришь: «Да похуй», ставишь её на паузу, берёшь другую коробку и везешь её. Переключение контекста — это просто твоё внутреннее решение, в рот меня чих-пых, никакого начальника не вызывали. Памяти на эту «паузу» — кот наплакал, не то что целый склад под нового грузчика.
Вот смотри на код, тут всё видно:
GlobalScope.launch { // Это не поток, чувак, это просто задача в очередь кинута
delay(1000) // Всё, ты сказал "стоп". Поток, на котором это бежало, пошёл другим корутинам служить, а не спит!
println("Done") // Через секунду тебя разбудили, и ты с того же места продолжил. Красота!
}
Создание этого launch — это просто бумажку в блокноте нарисовать, а не нового работника в штат принимать. Удивление пиздец, насколько же это эффективнее, когда тебе надо тысячу мелких задач перебирать. Потоки — это тяжелая артиллерия, а корутины — это диверсионный отряд, легкий и быстрый. Вот и вся магия, ёб твою мать.