Middle
Milyen mechanizmusokat kínál a Kotlin a párhuzamos számításokhoz?
sobes.tech MI
Válasz az MI-től
- Koruletok (Coroutines): Könnyűsúlyú szálak, amelyek lehetővé teszik az aszinkron kód imperatív stílusban történő írását, elkerülve a blokkoló hívásokat. Újraindítható funkciókon alapulnak, és nem kötődnek natív szálakhoz.
- Dispatchers: Meghatározzák azt a szálat vagy szálcsoportot, amelyen a korutina fut.
Dispatchers.Default: Erőforrás-igényes feladatokhoz (pl. CPU-bound).Dispatchers.IO: Bemenet/kimenet műveletekhez (pl. hálózati kérések, fájlkezelés).Dispatchers.Main: A kód végrehajtásához a fő szálon (pl. UI frissítés Android alkalmazásban).Dispatchers.Unconfined: A korutina a jelenlegi szálon fut egészen az első suspend hívásig.
- Suspend-függvények: Olyan funkciók, amelyeket szüneteltetni és később folytatni lehet. A
suspendmódosítóval vannak ellátva. - Context: Információkat tartalmaz a korutinról, például a dispatcher, a job és a kivételkezelő.
- Job: A korutin életciklusát reprezentálja (indított, aktív, befejezett, törölt). Lehetővé teszi a korutin kezelését (törlés, várakozás a befejezésre).
- Scope: Meghatározza a korutinok hatókörét, és kezeli azok életciklusát.
- MutableStateFlow / SharedFlow: A
kotlinx.coroutines.flowkönyvtárban biztonságos adatcserét tesznek lehetővé a korutinok között. - Mutex: Szinkronizációs primitív a kritikus szekciók védelmére.
import kotlinx.coroutines.*
fun main() = runBlocking {
// Példa korutin és dispatcher használatára
val job = launch(Dispatchers.Default) {
repeat(5) { i ->
println("Munkakorutina: $i")
delay(100) // Nem blokkoló késleltetés
}
}
println("Korutina indítva")
job.join() // Várakozás a korutina befejezésére
println("Korutina befejeződött")
}
// Suspend-függvény példája
suspend fun fetchData(): String {
delay(1000) // Hálózati kérés szimulációja
return "Adatok fogadva"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
val mutex = Mutex()
var counter = 0
suspend fun incrementCounter() {
mutex.withLock {
counter++
}
}