Middle
Koje elemente višestrukog izvršavanja pruža Kotlin?
sobes.tech АИ
Одговор од АИ
Kotlin pruža sledeće elemente višestrukog izvršavanja:
- Korutine: Laganiji tokovi zasnovani na funkcijama koje se mogu pauzirati. Obezbeđuju asinhrono i neblokirajuće izvršavanje koda.
- Konstruktori korutina: Funkcije koje pokreću korutine. Glavni:
launch(pokreće korutinu bez vraćanja vrednosti),async(pokreće korutinu i vraćaDeferred, koji se može čekati na dobijanje rezultata).// Primer korišćenja launch GlobalScope.launch { println("Zdravo iz korutine ${Thread.currentThread().name}") } // Primer korišćenja async val deferred = GlobalScope.async { delay(1000) // Simuliramo dugu operaciju "Rezultat" } val result = runBlocking { deferred.await() } // Čekamo rezultat Dispatchers: Određuju na kojem pool-u niti će se izvršiti korutina. Glavni:Dispatchers.Default: Opšti pool niti za CPU-intenzivne zadatke.Dispatchers.IO: Pool niti za blokirajuće operacije ulaza/izlaza.Dispatchers.Main: Dispečer za nit korisničkog interfejsa na odgovarajućim platformama (Android, Swing).Dispatchers.Unconfined: Korutina se pokreće u trenutnoj niti, ali može biti nastavljena u bilo kojoj niti.
GlobalScope.launch(Dispatchers.IO) { // Izvršavanje ulaza/izlaza }runBlocking: Funkcija-izgraditelj korutine koja blokira trenutnu nit do završetka korutine. Koristi se za kombinovanje blokirajućeg i neblokirajućeg koda, često u testovima ili glavnim funkcijama.runBlocking { launch { delay(500) println("Završeno u ${Thread.currentThread().name}") } println("Pokrenuto u ${Thread.currentThread().name}") }suspendfunkcije: Funkcije čiji se izvršavanje može pauzirati i nastaviti. Mogu biti pozvane samo iz drugihsuspendfunkcija ili konstruktora korutina.suspend fun doSomething() { delay(100) // Primer pauziranja }Job: Rukovalac na pokrenutu korutinu. Pruža metode za upravljanje životnim ciklusom korutine (otkazivanje, čekanje na završetak).val job = GlobalScope.launch { // Duga operacija } job.cancel() // Otkazivanje korutine runBlocking { job.join() } // Čekanje na završetakCoroutineScope: Definiše opseg vidljivosti za korutine. Korutine pokrenute u određenom opsegu automatski se otkazuju pri otkazivanju opsega. Pomaže u upravljanju životnim ciklusom korutina.val scope = CoroutineScope(Dispatchers.Default) scope.launch { // Korutina u ovom opsegu } scope.cancel() // Otkazivanje svih korutina u ovom opsegu- Kanali (
Channel): Primitivi za siguran prenos podataka između korutina. Kanali mogu biti jednostrani (samo za slanje ili primanje) ili dvosmerni.import kotlinx.coroutines.channels.Channel val channel = Channel<Int>() runBlocking { launch { for (x in 1..5) channel.send(x * x) channel.close() // Važno je zatvoriti kanal } launch { for (y in channel) println(y) } } - MUTEX-ovi (
Mutex): Primitivi za sinhronizaciju za obezbeđivanje ekskluzivnog pristupa zajedničkom resursu. Obezbeđuju sigurnost niti, dozvoljavajući samo jednoj korutini da poseduje mutex u datom trenutku.import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock val mutex = Mutex() var counter = 0 suspend fun incrementCounter() { mutex.withLock { counter++ } } - Stanja (
StateFlow,SharedFlow): Primitivi za rad sa tokovima podataka u kontekstu reaktivnog programiranja i višestrukog izvršavanja.StateFlowpredstavlja "hladni" tok sa trenutnim stanjem, aSharedFlowje "vreli" tok za široko emitovanje podataka.