Sobes.tech
Back to questions
Junior — Middle
63

Как осуществляется взаимодействие и выполнение двух корутин внутри одного потока исполнения?

Companies where asked
БрайтСофт

Answer from AI

sobes.tech AI

В Kotlin корутины внутри одного потока исполнения (например, Dispatchers.Main или Dispatchers.Default) работают на основе кооперативной многозадачности. Это значит, что корутины не прерывают друг друга принудительно, а сами уступают управление, вызывая при этом специальные точки приостановки (suspend функции).

Когда одна корутина достигает точки приостановки, она сохраняет своё состояние и освобождает поток, позволяя другой корутине выполняться. Таким образом, несколько корутин могут эффективно разделять один поток, выполняясь по очереди без блокировки.

Пример:

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch {
        repeat(3) {
            println("Coroutine 1: $it")
            delay(100) // приостанавливает корутину, освобождая поток
        }
    }
    launch {
        repeat(3) {
            println("Coroutine 2: $it")
            delay(100)
        }
    }
}

Здесь обе корутины выполняются в одном потоке, поочерёдно уступая управление друг другу при вызове delay.