Для новичка-джуна, который еще плохо знает что такое потоки, синхронность-асинхронность, многопоточность, понять такую тему будет очень сложно. Особенно если в статьях-видосах начинают сразу же грузить такими терминами как Coroutine Builders, Scopes, Jobs и т.д.
Для того чтобы максимально просто объяснить что такое Корутина я приведу два примера из обычной жизни: Борщ. Борщ не растет на дереве, чтобы его можно было сорвать и съесть. Нельзя подстрелить, освежевать и зажарить. Борщ это комплексное понятие. Для того чтобы Борщ стал борщем нужны компоненты(капуста, свекла, картошка, лук, мясо), которые сделают Его борщем.
Так же и с Корутиной. Корутины это многосоставной комплекс объектов. То есть К. это не одна условная «штука». Корутина появляется путем подключения и взаимодействия многих «штук», хотя и наследуются от одного абстрактного класса.
Также как и капуста, свекла, картошка, лук, мясо — Builders, Suspend-функции, Scopes, Jobs, Dispatchers, Exception-Handler и др. классы работая вместе создают нам Корутину-борщ! =)
О чем и как работает Корутина? Если вам плохо знакомы такие понятия многопоточность, асинхронность, блокировка потока — Гуглите)
Корутина это Не про многопоточность, это про асинхронность. Корутина это Не про параллельность. Она не требуют блокирующих операций и блокировки потока. То есть, мы можем запустить Корутины на одном потоке при этом не заблокировав ее работу! Но приостановив работу кода.
Следовательно мы можем запустить Корутину и на UI-потоке в Андроиде, при этом его не заблокировав и не вызвав ANR! «Как такое возможно?» скажете вы, а благодаря такому понятию как Structered Concurrency или Структурированная Асинхронность, которое известно программистам еще 60-х годов прошлого века. Более подробно про механизм «остановки выполнения» поговорим чуть позже.
Корутины очень эффективно используют поток, в котором запускаются. Поэтому Корутины называют легковесными потоками. Но не стоит думать, что Корутины работают только в одном потоке. Их можно запускать в разных потоках. Для запуска Корутин в одном-многих потоках нам понядобятся Builders, Suspend-функции, Scopes, Jobs, Dispatchers. Но о них позже.
Также Корутины Не требуют поддержки со стороны ОС, стало быть, их можно добавить в любой язык программирования. Корутины это возможность писать асинхронный код в синхронном стиле. То есть без всякого Колбэкхэла!
Корутины являются составной частью языка Котлин начиная с версии 1.1. Но в рамках языка реализованы лишь небольшая, базовая часть возможностей Корутин. Весь остальной функционал был вынесен в отдельную либу.
Итак, это вкратце и простым языком о Корутине=) Далее будем глубже изучать компоненты и запускать разные Корутины.