Ответ вслух Junior Корутины и structured concurrency спрашивают часто обновлено

Что такое корутины

Вопрос

Что такое корутины в Kotlin, чем они отличаются от потоков и зачем нужны?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

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

Что должно прозвучать в ответе

  • Корутина приостанавливается, не блокируя поток

  • Лёгкие: тысячи корутин на нескольких потоках

  • suspend-функции, компилятор делает машину состояний с Continuation

  • Диспетчер определяет поток, withContext переключает

  • Structured concurrency: scope ограничивает время жизни, отмена каскадом

  • Последовательный код вместо колбэков

Что могут спросить следом

  • Что будет, если вызвать блокирующий код внутри корутины на Main?
  • Что такое viewModelScope и когда он отменяется?
  • Чем корутины лучше RxJava?

Разбор

Корутина это вычисление, которое умеет приостанавливаться и продолжаться позже, не занимая поток во время ожидания. Пока одна корутина ждёт ответ сети, тот же поток выполняет другие, поэтому корутины очень лёгкие: десятки тысяч на нескольких потоках, тогда как каждый поток стоит мегабайт стека и переключение ядром. Синтаксически это обычный последовательный код: suspend-функции вызываются как обычные, без колбэков. Под капотом компилятор превращает suspend-функцию в машину состояний с параметром Continuation. Поток выбирает диспетчер: Main для UI, IO для блокирующего ввода-вывода, Default для вычислений, а withContext переключает его на время блока. Главная идея кроме лёгкости: structured concurrency. Корутины живут в scope, например viewModelScope; когда scope отменяют, отменяются все его корутины, и ничего не утекает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.