Middle
Kādus mehānismus piedāvā Kotlin paralēliem aprēķiniem?
sobes.tech AI
Atbilde no AI
- **Korušinas (Coroutines): Vieglie straumes, kas ļauj rakstīt asenhronisko kodu imperatīvā stilā, izvairoties no bloķējošiem izsaukumiem. Balstītas uz atsāktajām funkcijām un nav saistītas ar dabiskiem straumes.
- Dispatchers: Nosaka straumi vai straumes baseinu, kurā tiks izpildīta korutīna:
Dispatchers.Default: resursu intensīviem uzdevumiem (piemēram, CPU-pamatots)Dispatchers.IO: I/O operācijām (piemēram, tīkla pieprasījumi, failu apstrāde)Dispatchers.Main: izpildīt kodu galvenajā straumē (piemēram, UI atjaunināšana Android lietotnē)Dispatchers.Unconfined: izpilda korutīnu pašreizējā straumē līdz pirmajai suspend funkcijai
- Suspend funkcijas: funkcijas, kuras var apturēt un vēlāk atsākt. Marķētas ar
suspendmodifikatoru. - Context: satur informāciju par korutīnu, piemēram, dispatcher, job un izņēmumu apstrādātāju.
- Job: pārstāv korutīnas dzīves ciklu (sākta, aktīva, pabeigta, atcelta). Ļauj pārvaldīt korutīnu (atcelt, gaidīt pabeigšanu)
- Scope: nosaka korutīnu redzamības jomu, pārvaldot to dzīves ciklu.
- MutableStateFlow / SharedFlow:
kotlinx.coroutines.flowbibliotēkā, ļauj droši apmainīties ar datiem starp korutīnām. - Mutex: sinhronizācijas primitives, kas aizsargā kritiskās sekcijas.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Korutīnu un dispatcher piemērs
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("Darbojošā korutīna: $i")
delay(100) // Neaizkavējošs aizkaves
}
}
println("Korutīna uzsākta")
job.join() // Gaidām korutīnas pabeigšanu
println("Korutīna pabeigta")
}
// Suspend funkcijas piemērs
suspend fun fetchData(): String {
delay(1000) // Tīkla pieprasījuma imitācija
return "Dati saņemti"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var skaitītājs = 0
suspend fun incrementCounter() {
mutex.withLock {
skaitītājs++
}
}