Middle
Kotlin параллел эсептөөлөр менен иштөө үчүн кайсы механизмдерди сунуштайт?
sobes.tech AI
AIден жооп
- Корутины (Coroutines): Жеңіл салмақты ағындар, олар асинхронды кодты императивті стильде жазуға мүмкіндік береді, блоктайтын шақырулардан аулақ болу үшін. Қалпына келтірілетін функцияларға негізделген және табиғи ағындарға байланыссыз.
- Dispatchers: Корутина орындалатын ағынды немесе ағындар пулын анықтайды:
Dispatchers.Default: Ресурсты көп талап ететін тапсырмалар үшін (мысалы, CPU-бағытталған)Dispatchers.IO: I/O операциялары үшін (мысалы, желілік сұраулар, файлдармен жұмыс)Dispatchers.Main: Android қосымшасында UI жаңартулар сияқты негізгі ағында орындалу үшінDispatchers.Unconfined: Корутина ағымдағы ағында орындалады, бірінші suspend-функцияға дейін
- Suspend-функциялар: Кейін тоқтатылып, қайта жалғастырылуы мүмкін функциялар.
suspendмодификаторымен белгіленген. - Context: Корутина туралы ақпаратты қамтиды, мысалы, dispatcher, job және қателерді өңдеу.
- Job: Корутина өмірлік циклін көрсетеді (басталды, белсенді, аяқталды, тоқтатылды). Оны басқаруға мүмкіндік береді (жою, аяқтау)
- Scope: Корутина үшін көрінетін аймақты анықтайды, олардың өмірлік циклін басқарады.
- MutableStateFlow / SharedFlow:
kotlinx.coroutines.flowкітапханасында, корутиндер арасында қауіпсіз деректер алмасуға мүмкіндік береді. - Mutex: Синхрондау прimitives, ол критикалық бөлімдерді қорғайды.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Корутина мен dispatcher қолдану мысалы
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("Жұмыс істеп жатқан корутина: $i")
delay(100) // Блоктамайтын кідіріс
}
}
println("Корутина іске қосылды")
job.join() // Корутина аяқталуын күтеміз
println("Корутина аяқталды")
}
// Suspend-функцияның мысалы
suspend fun fetchData(): String {
delay(1000) // Желілік сұрауды имитациялау
return "Деректер алынды"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var counter = 0
suspend fun incrementCounter() {
mutex.withLock {
counter++
}
}