Middle
Kādas daudzprocesu elementus nodrošina Kotlin?
sobes.tech AI
Atbilde no AI
Kotlin nodrošina šādus daudzvirzienu elementus:
- Korutinas: Viegls plūds, balstīts uz pauzes funkcijām. Nodrošina asinhronu un neblokējošu koda izpildi.
- Korutinu būvētāji: Funkcijas, kas sāk korutinas. Galvenie:
launch(sāk korutinu bez atgriešanas vērtības),async(sāk korutinu un atgriežDeferred, ko var gaidīt rezultātam).// Piemērs `launch` izmantošanai GlobalScope.launch { println("Sveiki no korutinas ${Thread.currentThread().name}") } // Piemērs `async` izmantošanai val deferred = GlobalScope.async { delay(1000) // Ilga operācija imitēta "Rezultāts" } val result = runBlocking { deferred.await() } // Gaidām rezultātu Dispatchers: Nosaka, no kura pavediena pulta tiks izpildīta korutina. Galvenie:Dispatchers.Default: Kopējais pavedienu pults CPU-intensīviem uzdevumiem.Dispatchers.IO: Pavedienu pults bloķējošām I/O operācijām (faili, tīkls).Dispatchers.Main: Dispečers lietotāja saskarnes plūsmai atbilstošās platformās (Android, Swing).Dispatchers.Unconfined: Korutina tiek palaista pašreizējā pavedienā, bet var atsākties jebkurā pavedienā.
GlobalScope.launch(Dispatchers.IO) { // I/O izpilde }runBlocking: Korutinas būvētāja funkcija, kas bloķē pašreizējo pavedienu līdz korutinas beigām. Lieto bloķējoša un neblokējoša koda apvienošanai, bieži testos vai galvenajās funkcijās:runBlocking { launch { delay(500) println("Beidzās ${Thread.currentThread().name}") } println("Sākās ${Thread.currentThread().name}") }suspendfunkcijas: Funkcijas, kuru izpilde var tikt pārtraukta un atsākta. Tiek izsauktas tikai no citāmsuspendfunkcijām vai korutinu būvētājiem:suspend fun doSomething() { delay(100) // Pārtraukšanas piemērs }Job: Palaistās korutinas rokturis. Nodrošina metodes korutinas dzīves cikla pārvaldībai (atsaukšana, gaidīšana pabeigšanai):val job = GlobalScope.launch { // Ilga operācija } job.cancel() // Atsaukt korutinu runBlocking { job.join() } // Gaidīt pabeigšanuCoroutineScope: Nosaka korutinu apgabalu. Korutinas, kas sākas noteiktā apgabalā, automātiski tiek atceltas, ja apgabals tiek atcelts. Palīdz pārvaldīt korutinu dzīves ciklu:val scope = CoroutineScope(Dispatchers.Default) scope.launch { // Korutina šajā apgabalā } scope.cancel() // Atcelt visas korutinas šajā apgabalā- Kanāli (
Channel): Primitīvi drošai datu pārraidīšanai starp korutīnām. Kanāli var būt vienvirziena (nosūtīšanai vai saņemšanai) vai divvirziena:import kotlinx.coroutines.channels.Channel val channel = Channel<Int>() runBlocking { launch { for (x in 1..5) channel.send(x * x) channel.close() // Svarīgi aizvērt kanālu } launch { for (y in channel) println(y) } } - Mūķes (
Mutex): Sinhronizācijas primitīvi, nodrošinot ekskluzīvu piekļuvi kopējam resursam. Nodrošina pavedienu drošību, ļaujot tikai vienai korutīnai vienlaikus turēt mūķi:import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock val mutex = Mutex() var counter = 0 suspend fun incrementCounter() { mutex.withLock { counter++ } } - Stāvokļi (
StateFlow,SharedFlow): Datu plūsmas reaktīvai programmēšanai un daudzpavedienu kontekstā.StateFlowattēlo "aukstu" plūsmu ar pašreizējo stāvokli, betSharedFlow— "karstu" plūsmu datu plašsaziņai.