Почему считается неправильным называть корутины легковесными потоками

Ответ

Корутины — это не потоки, а механизм асинхронного выполнения на уровне языка (Kotlin). Они работают в рамках существующих потоков и не создают новых.

Ключевые отличия:

  • Потоки — управляются ОС, требуют больше ресурсов (стек, контекст переключения).
  • Корутины — выполняются в потоке, переключаются без затрат ОС, используют suspend-функции для неблокирующих пауз.

Пример:

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

Название "легковесные потоки" вводит в заблуждение, так как корутины — это абстракция над асинхронным кодом, а не замена потоков.

Ответ 18+ 🔞

Давай разберёмся с этими корутинами, а то народ путается, как будто на дворе 2002-й год и все только про треды слышали.

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

Чем они вообще отличаются, ёпта?

  • Потоки (Threads). Это уже серьёзно. Их создаёт и переключает операционная система. Каждый поток — это овердохуища ресурсов: свой стек памяти, контекст. Запусти их тысячу — и комп начнёт бздеть, как старый холодильник.
  • Корутины. Это задачи, которые крутятся внутри потока. Они переключаются не на уровне ОС, а на уровне самого Котлина, поэтому это дёшево и сердито. Стоят копейки. Их главный инструмент — suspend-функции. Когда такая функция говорит "я подожду", корутина не блокирует весь поток, а просто приостанавливается, освобождая поток для других дел. Потом, когда событие наступило, она продолжает с того же места. Удобно, правда?

Пример, чтобы вообще всё стало ясно:

// Это корутина, а не поток, запомни!
GlobalScope.launch {
    delay(1000) // Смотри, не блокируем поток! Просто приостановились на секунду.
    println("Done")
}

Вот поэтому называть их "легковесными потоками" — это пизда рулю и введение в заблуждение. Это не замена потоков, это надстройка, абстракция, чтобы асинхронный код писать почти как синхронный, без этих адских колбэков, от которых волосы дыбом встают. Корутины — они про удобство, а потоки — про железо и ОС. Не путай, а то сам от себя охуеешь потом.