Корутины
Приложениям часто нужно выполнять несколько задач одновременно: например, реагировать на ввод пользователя, загружать данные или обновлять экран. Для этого они используют параллелизм, который позволяет операциям выполняться независимо, не блокируя друг друга.
Чаще всего для параллельного выполнения задач используют потоки — независимые пути выполнения, которыми управляет операционная система. Однако потоки относительно ресурсоёмки, а создание большого их количества может привести к проблемам с производительностью.
Для эффективной поддержки параллелизма Kotlin использует асинхронное программирование на основе корутин, позволяющее писать асинхронный код в естественном последовательном стиле с помощью приостанавливаемых функций. Корутины — это лёгкая альтернатива потокам. Они могут приостанавливаться, не блокируя системные ресурсы, и эффективно расходуют ресурсы, поэтому лучше подходят для тонкозернистого параллелизма.
Большинство возможностей корутин предоставляет библиотека kotlinx.coroutines, включающая инструменты для запуска корутин, обработки параллелизма, работы с асинхронными потоками данных и многое другое.
Если вы только знакомитесь с корутинами в Kotlin, прежде чем переходить к более сложным темам, начните с руководства Основы корутин. В этом руководстве на простых примерах рассматриваются ключевые понятия: приостанавливаемые функции, функции построения корутин и структурированный параллелизм:
Понятия, связанные с корутинами
Библиотека kotlinx.coroutines предоставляет основные строительные блоки для параллельного выполнения задач, организации выполнения корутин и управления общим состоянием.
Приостанавливаемые функции и функции построения корутин
Корутины в Kotlin основаны на приостанавливаемых функциях, которые позволяют коду приостанавливать и возобновлять выполнение, не блокируя поток. Ключевое слово suspend обозначает функции, которые могут асинхронно выполнять длительные операции.
Чтобы запускать новые корутины, используйте такие функции построения корутин, как .launch() и .async(). Эти функции являются функциями расширения для CoroutineScope, который определяет жизненный цикл корутины и предоставляет её контекст.
Подробнее об этих функциях можно узнать в руководствах Основы корутин и Композиция приостанавливаемых функций.
Контекст и поведение корутины
Запуск корутины из CoroutineScope создаёт контекст, который управляет её выполнением. Функции построения корутин, такие как .launch() и .async(), автоматически создают набор элементов, определяющих поведение корутины:
Интерфейс
Jobотслеживает жизненный цикл корутины и обеспечивает структурированный параллелизм.CoroutineDispatcherопределяет, где выполняется корутина, например в фоновом потоке или в главном потоке приложения с пользовательским интерфейсом.CoroutineExceptionHandlerобрабатывает неперехваченные исключения.
Эти и другие возможные элементы составляют контекст корутины, который по умолчанию наследуется от родительской корутины. Этот контекст образует иерархию, обеспечивающую структурированный параллелизм: связанные корутины можно отменять вместе или обрабатывать исключения как группу.
Асинхронный поток данных и общее изменяемое состояние
В Kotlin предусмотрено несколько способов обмена данными между корутинами. Выберите подходящий вариант в зависимости от того, как вы хотите передавать значения между корутинами:
Flowвыдаёт значения только тогда, когда корутина активно собирает их.Channelпозволяет нескольким корутинам отправлять и получать значения, причём каждое значение доставляется ровно одной корутине.SharedFlowнепрерывно передаёт каждое значение всем активным корутинам, собирающим данные.
Когда нескольким корутинам нужно обращаться к одним и тем же данным или обновлять их, они используют общее изменяемое состояние. Без координации это может привести к состояниям гонки, когда операции непредсказуемо влияют друг на друга. Чтобы безопасно управлять общим изменяемым состоянием, используйте StateFlow для обёртывания общих данных. Затем вы сможете обновлять их в одной корутине и получать их актуальное значение в других.
Подробнее см. в разделах Потоки данных, Каналы и руководстве Корутины и каналы.
Что дальше
Изучите основы корутин, приостанавливаемых функций и функций построения корутин в руководстве по основам корутин.
Узнайте, как объединять приостанавливаемые функции и создавать конвейеры корутин, в разделе Композиция приостанавливаемых функций.
Узнайте, как отлаживать корутины с помощью встроенных инструментов IntelliJ IDEA.
Об отладке потоков данных см. в руководстве Отладка Kotlin Flow с помощью IntelliJ IDEA.
Прочитайте Руководство по разработке пользовательских интерфейсов с корутинами, чтобы узнать о разработке пользовательских интерфейсов на основе корутин.
Ознакомьтесь с рекомендациями по использованию корутин в Android.
Посмотрите справочник по API
kotlinx.coroutines.
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/coroutines-overview.html