Что такое корутины
Вопрос
Что такое корутины в 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 ошибок.