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

Ответ

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

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

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

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

Ответ 18+ 🔞

А, ну это вообще классика, блядь! Смотри, тут всё просто, как три копейки. Корутины — это вообще не потоки, это как бы... ну, ёпта, облегчённая версия, хитрая жопа такая.

Представь себе потоки — это как нанять отдельного грузчика на каждую коробку. Мужик свой, у него своя каска, своя тележка, свой обеденный перерыв. Создать его — овердохуища бумажной волокиты, он жрёт оперативки, как не в себя, и переключаться между ними — это ж целая история с начальником цеха (это ядро ОС, если что). Доверия ебать ноль, что он не сломает что-нибудь, пока ты спишь.

А корутины — это ты один мужик, но с суперспособностью. Ты везешь одну коробку, упираешься, думаешь: «Э, сабака сука, тут клей не высох». Вместо того чтобы стоять и тупить, ты говоришь: «Да похуй», ставишь её на паузу, берёшь другую коробку и везешь её. Переключение контекста — это просто твоё внутреннее решение, в рот меня чих-пых, никакого начальника не вызывали. Памяти на эту «паузу» — кот наплакал, не то что целый склад под нового грузчика.

Вот смотри на код, тут всё видно:

GlobalScope.launch { // Это не поток, чувак, это просто задача в очередь кинута
    delay(1000) // Всё, ты сказал "стоп". Поток, на котором это бежало, пошёл другим корутинам служить, а не спит!
    println("Done") // Через секунду тебя разбудили, и ты с того же места продолжил. Красота!
}

Создание этого launch — это просто бумажку в блокноте нарисовать, а не нового работника в штат принимать. Удивление пиздец, насколько же это эффективнее, когда тебе надо тысячу мелких задач перебирать. Потоки — это тяжелая артиллерия, а корутины — это диверсионный отряд, легкий и быстрый. Вот и вся магия, ёб твою мать.