Middle
Milliseid mehhanisme pakub Kotlin paralleelsete arvutuste jaoks?
sobes.tech AI
Vastus AI-lt
- **Korutiinid (Coroutines): Kerged voolud, mis võimaldavad kirjutada asünkroonset koodi imperatiivses stiilis, vältides blokeerivaid kõnesid. Põhineb taastuvatel funktsioonidel ja ei ole seotud natiivsete vooludega.
- Dispatchers: Määrab voolu või voolude bassein, kus korutina täidetakse:
Dispatchers.Default: ressursimahukate ülesannete jaoks (nt CPU-põhine)Dispatchers.IO: I/O operatsioonidele (nt võrgupäringud, failidega töötamine)Dispatchers.Main: koodi täitmine peamisel voolul (nt UI uuendamine Android rakenduses)Dispatchers.Unconfined: täidab korutina praegusel voolul kuni esimese suspend-funktsiooni kutsumiseni
- Suspend-funktsioonid: funktsioonid, mida saab peatada ja hiljem jätkata. Märgitud
suspendmodifikaatoriga. - Context: sisaldab teavet korutina kohta, näiteks dispatcher, job ja erandite töötleja.
- Job: esindab korutina elutsüklit (käivitatud, aktiivne, lõpetatud, tühistatud). Võimaldab hallata korutinat (tühistada, oodata lõpetamist)
- Scope: määrab korutinate nähtavusala, juhtides nende elutsüklit.
- MutableStateFlow / SharedFlow:
kotlinx.coroutines.flowraamatukogus, võimaldab turvaliselt andmeid vahetada korutinate vahel. - Mutex: sünkroniseerimise primitiiv, mis kaitseb kriitilisi sektsioone.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Korutinate ja dispatcher kasutamise näide
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("Töötav korutina: $i")
delay(100) // Mitte-blokeeriv viivitus
}
}
println("Korutina käivitus")
job.join() // Ootame korutina lõpetamist
println("Korutina lõpetas")
}
// Suspend-funktsiooni näide
suspend fun fetchData(): String {
delay(1000) // Võrgu päringu imiteerimine
return "Andmed saadud"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var counter = 0
suspend fun incrementCounter() {
mutex.withLock {
counter++
}
}