Шпаргалка: Kotlin Coroutine диспетчеры и потоки: где выполняются корутины?
Тема 1. Как выглядит Kotlin Coroutine без макияжа Тема 2. Kotlin suspend функции Код Kotlin корутин выполняется в потоках , но важно понимать, что корутины не привязаны жестко к конкретным потокам. Их выполнение управляется диспетчерами (Dispatchers), которые определяют, в каком потоке или пуле потоков будет работать корутина. Как мы обсуждали в Как выглядит Kotlin Coroutine без макияжа при создании корутины создается объект Continuation, в котором содержится код, который выполняет корутина. Код делится на блоки - suspend-функции с помощью switch. Когда код доходит до suspend-функции она вызывается и в неё передается весь текущий объект Continuation и на этом это ответвление switch заканчивается. Suspend-функция по завершению своей работы вызывает метод resume у переданного ей объекта Continuation и таким образом начинается выполнение следующего ответвления switch'a. Мы всё это вспомнили не просто так: объект Continuation, который мы обсуждаем на всех этапах передается в специальной обёртке DispatchedContinuation. Именно на этой обертке и вызывается метод resume, который выделяет поток и вызывает resume у объекта Continuation. Исходя из изложенного выше мы можем понять механизм смены потока - он может меняться при каждом вызове метода resume у объекта DispatchedContinuation. Доступны следующие диспетчеры:
https://habr.com/ru/articles/971126/
#kotlin_coroutines #kotlin #dispatchers #suspend_fun