Middle
Koje mehanizme pruža Kotlin za rad sa paralelnim izračunima?
sobes.tech АИ
Одговор од АИ
- Korutine (Coroutines): Lagan lagani tokovi koji omogućavaju pisanje asinhronog koda u imperativnom stilu, izbegavajući blokirajuće pozive. Osnovani su na funkcijama koje se mogu ponovo pokrenuti i nisu povezani sa nativnim tokovima.
- Dispatchers: Određuju tok ili skup tokova u kojima će se izvršiti korutina.
Dispatchers.Default: Za zadatke koji zahtevaju mnogo resursa (npr. CPU-bound).Dispatchers.IO: Za operacije ulaza/izlaza (npr. mrežni zahtevi, rad sa fajlovima).Dispatchers.Main: Za izvršavanje koda na glavnom thread-u (npr. ažuriranje UI u Android aplikaciji).Dispatchers.Unconfined: Izvršava korutinu na trenutnom thread-u do prvog poziva suspend funkcije.
- Suspend funkcije: Funkcije koje mogu biti pauzirane i nastavljene kasnije. Obeležene su modifikatorom
suspend. - Context: Sadrži informacije o korutini, kao što su dispatcher, job i handler izuzetaka.
- Job: Predstavlja životni ciklus korutine (pokrenuta, aktivna, završena, otkazana). Omogućava upravljanje korutinom (otkazivanje, čekanje na završetak).
- Scope: Definiše opseg za korutine, upravljajući njihovim životnim ciklusom.
- MutableStateFlow / SharedFlow: U biblioteci
kotlinx.coroutines.flow, omogućavaju siguran razmenu podataka između korutina. - Mutex: Primitiv za sinhronizaciju za zaštitu kritičnih sekcija.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Primer korišćenja korutina i dispatcher-a
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("Radna korutina: $i")
delay(100) // Ne blokirajuće kašnjenje
}
}
println("Pokrenuli smo korutinu")
job.join() // Čekamo završetak korutine
println("Korutina završena")
}
// Primer suspend funkcije
suspend fun fetchData(): String {
delay(1000) // Simulacija mrežnog zahteva
return "Podaci primljeni"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var counter = 0
suspend fun incrementCounter() {
mutex.withLock {
counter++
}
}