Назад к вопросам
Junior — Middle
64
Как осуществляется взаимодействие и выполнение двух корутин внутри одного потока исполнения?
Компании, где спрашивали
БрайтСофт
Ответ от нейросети
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.