Middle — Middle+
Korutina aktyorlari parallel operatsiyalarni bajarishda raqobat shartlarini oldini olishda qanday yordam beradi?
sobes.tech AI
AIdan javob
Coroutine aktyorlari Kotlin Coroutines ichida holatni boshqarishga va holatga ta'sir qilmasdan parallel operatsiyalarni bajarishga yordam beradigan namunadir.
Qanday ishlaydi:
- Actor — bu kiruvchi xabarlarni (buyruqlarni) ketma-ket ishlovchi coroutine.
- Barcha holat o'zgarishlari bu coroutine ichida yuzaga keladi, bu esa ma'lumotlarga ketma-ket kirishni kafolatlaydi.
- Boshqa coroutine'lar Actor bilan xabar yuborish orqali muloqot qiladi, holatga to'g'ridan-to'g'ri ta'sir qilmaydi.
Shunday qilib, holatga raqobat shartlari oldini olinadi, chunki umumiy holatga parallel kirish yo'q — barcha operatsiyalar Actor ichida navbat bilan bajariladi.
Misol:
sealed class CounterMsg
object IncCounter : CounterMsg()
class GetCounter(val response: CompletableDeferred<Int>) : CounterMsg()
fun CoroutineScope.counterActor() = actor<CounterMsg> {
var counter = 0
for (msg in channel) {
when (msg) {
is IncCounter -> counter++
is GetCounter -> msg.response.complete(counter)
}
}
}
// Foydalanish
val counter = counterActor()
counter.send(IncCounter)
val response = CompletableDeferred<Int>()
counter.send(GetCounter(response))
println("Counter = ${response.await()}")
Bu yondashuv blokirovka va murakkab sinxronizatsiya mexanizmlarsiz xavfsiz parallel kod yozishni soddalashtiradi.