Middle
Kokius mechanizmus teikia Kotlin, kad dirbtų su paraleliniais skaičiavimais?
sobes.tech AI
Atsakymas iš AI
- Koručinos (Coroutines): Lengvai srautai, leidžiantys rašyti asinchroninį kodą imperatyviu stiliumi, išvengiant blokuojančių iškvietimų. Pagrįsti atnaujinamomis funkcijomis ir nėra susiję su natūraliais srautais.
- Dispatchers: Nustato srautą arba srautų baseiną, kuriame bus vykdoma korutina:
Dispatchers.Default: resursų intensyviems užduotims (pvz., CPU-pagrįstoms)Dispatchers.IO: I/O operacijoms (pvz., tinklo užklausos, failų tvarkymas)Dispatchers.Main: vykdyti kodą pagrindiniame sraute (pvz., UI atnaujinimas Android programoje)Dispatchers.Unconfined: vykdo korutiną dabartiniame sraute iki pirmojo suspend funkcijos iškvietimo
- Suspend funkcijos: funkcijos, kurios gali būti sustabdytos ir vėl atnaujintos vėliau. Paženklintos
suspendmodifikatoriumi. - Context: turi informaciją apie korutiną, pvz., dispatcher, job ir klaidų tvarkytoją.
- Job: atstovauja korutiną gyvenimo ciklui (pradėta, aktyvi, baigta, atšaukta). Leidžia valdyti korutiną (atšaukti, laukti pabaigos)
- Scope: apibrėžia korutinų matomumo sritį, valdydama jų gyvenimo ciklą.
- MutableStateFlow / SharedFlow:
kotlinx.coroutines.flowbibliotekoje, leidžia saugiai keistis duomenimis tarp korutinų. - Mutex: sinchronizacijos primitivas, saugantis kritines sekcijas.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Korutinų ir dispatcher pavyzdys
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("Darbo korutina: $i")
delay(100) // Neužblokuojantis vėlinimas
}
}
println("Korutina pradėta")
job.join() // Laukiame korutiną užbaigimo
println("Korutina baigta")
}
// Suspend funkcijos pavyzdys
suspend fun fetchData(): String {
delay(1000) // Tinklo užklausos imitacija
return "Duomenys gauti"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var counter = 0
suspend fun incrementCounter() {
mutex.withLock {
counter++
}
}