kotlinx.coroutines¶
Green threads are threads that are scheduled by a runtime library or virtual machine (VM) instead of natively by the underlying operating system (OS).
Green threads emulate multithreaded environments without relying on any native OS abilities, and they are managed in user space instead of kernel space, enabling them to work in environments that do not have native thread support.
Базовые понятия¶
- Блокирующие операции
Останавливают текущее выполнение потоков или корутин(превязанному к корутине потоку), до того, как некоторое условие будет достигнуто. При этом поток переходит в режим ожидания и не выполняет никакую полезную работу.
- Suspend функции
Приостанавливают выполнение корутины, при этом текущий поток начинает выполнять другую корутину. Специфицирование функции модификатором suspend позволяет приостанавливать выполнение корутины, при исполнении данной функции, а следовательно вызывать другие suspend функции
CoroutineScope¶
Определяет область для создания новых корутин и управления ними.
Каждый Coroutine Builder добавляет инстанс CoroutineScope в область исполнения корутин (Structured concurrency). При этом есть возможность управления всеми созданными корутинами.
object GlobalScope : CoroutineScopeОбласть, ограниченная временем работы приложения. Корутины созданные в данной области, как и потоки-демоны, выполняются, пока приложение запущенно.
Coroutine Builders¶
fun <T> runBlocking(CoroutineContext, suspend CoroutineScope.() -> T): TБлокирует выполнение текущего потока/корутины до завершения всех корутин (создаваемых при вызове других Coroutine Builders) в некотором CoroutineScope, определенном в области исполнения переданной корутины.
Служит для создания корутин и выполнения suspend функций (приостанавливающих текущее выполнение корутин) из вне CoroutineScope.
suspend fun <R> coroutineScope(suspend CoroutineScope.() -> R): RПозволяет определять CoroutineScope, так же как и в runBlocking, но при этом поток не блокируется, а исполняющаяся корутина приостанавливается до окончания исполнения всех созданных корутин в CoroutineScope.
fun CoroutineScope.launch(
CoroutineContext, CoroutineStart, suspend CoroutineScope.() -> Unit
): JobЗапускает паралельное исполнение переданной корутины в указанном CoroutineScope и возвращает управление текущему потоку/корутине.
Возвращает объект Job, через который можно дождаться (приостановив текущую корутину - suspend) окончания выполнения корутины.
Стандартные suspend функции¶
delay…
repeat…