Рубрика: Coroutine

  • Что такое Flow

    Flow — это упакованный в объект фрагмент кода, который производит какой-то последовательный набор элементов (данных). С одной стороны есть условный Отправитель, который этот код создал и готов предоставить его в виде Flow обертки. А с другой стороны есть Получатель, который возьмет этот Flow, запустит его и предоставит ему специальный колбэк, куда Flow будет складывать данные, […]

  • Обработка ошибок в Корутинах

    Обработка ошибок в Корутинах всегда вызывала затруднения у многих разработчиков по ряду причин. Мало того, что существует несколько способов их обработки, но в первую очередь необходимо понять механизм распространения ошибок, который идет со структурированным параллелизмом(structered concurrency). И есть множество ситуаций, когда распространение ошибок с помощью Корутин происходит по-разному, например: Ошибки, возникающие в Scope-ах с CoroutineExceptionHandler […]

  • Dispatchers

    DefaultЕсли корутина не находит в своем контексте диспетчер, то она использует диспетчер по умолчанию. Этот диспетчер представляет собой пул потоков. Количество потоков равно количеству ядер процессора. Он не подходит для IO операций, но сгодится для интенсивных вычислений. IOИспользует тот же пул потоков, что и диспетчер по умолчанию. Но его лимит на потоки равен 64 (или […]

  • Context

    Для выполнения каждой Корутины нужен CoroutineContext. А если точнее CoroutineContext-ы). А если еще точнее то компоненты наследники от класса CoroutineContext. Это необходимые компоненты, которые нужны для контроля над корутиной, переключения потоков выполнения, обработки ошибок и т.д. Но где и куда его вставлять? =) В предыдущих примерах мы уже встраивали и использовали CoroutineContext. Помните Job-у, которую […]

  • Builders

    Билдер launch()Начнем с билдера launch. Мы уже использовали его в прошлых уроках, чтобы создавать корутины. Но у него есть еще пара возможностей, о которых надо рассказать отдельно. В прошлом уроке мы рассматривали такой пример: Мы выяснили, что билдер launch создает и запускает корутину. Билдер не ждет, пока корутина выполнится, и не блокирует выполнение метода onRun. […]

  • Scope

    Scope можно в чем-то сравнить с Активити Андроида. Если весь ЮИ отрисовывается в рамках Активити и нигде больше, то также и с Корутинами. Их можно запустить в рамках Scope-а. Также и suspend-функции запускаются в рамках scope-а. По примеру борща, scope можно сравнить с тарелкой, в котором будет борщ=) Scope который отменяется за собой отменяет дочерние […]

  • Continuation. Не «Магия» корутин

    А теперь давайте посмотрим на то как происходит не блокирование потока и отсутствие колбэков «под капотом». Если честно, то колбэки все же есть=) Не все так просто, но и не сложно! Корутины используют специальный механизм Continuation. Continuation можно рассматривать как колбэк. Continuation — похож на огромную стейт-машину, где на каждый кусок Корутин-кода(Suspend-функции) есть свой Switch-Case. […]

  • Suspend-функция

    Давайте поговорим об одном из компонентов составляющих понятия Корутины Suspend-функции. Помните мы говорили о том что Корутины не блокируют поток, а приостанавливают работу кода. Ну так вот, такое свойство обеспечивает Suspend-функция. То есть, код который вписан в тело Suspend-функции при запуске не заблокирует поток, но этот код приостановит свою работу. Это означает что мы можем […]

  • Что же такое Корутина?

    Для новичка-джуна, который еще плохо знает что такое потоки, синхронность-асинхронность, многопоточность, понять такую тему будет очень сложно. Особенно если в статьях-видосах начинают сразу же грузить такими терминами как Coroutine Builders, Scopes, Jobs и т.д. Для того чтобы максимально просто объяснить что такое Корутина я приведу два примера из обычной жизни: Борщ. Борщ не растет на […]