Sobes.tech
Middle

Koje osobine rada sa tokovima podataka pruža programski jezik Kotlin?

sobes.tech АИ

Одговор од АИ

Kotlin nudi ugrađenu podršku za korutine za asinhroni, neblokirajući rad, pružajući lakšu alternativu OS nitima.

Osobine rada sa tokovima podataka putem korutina:

  • Lagana: Korutine nisu vezane za OS niti 1:1. Jedna korutina koristi znatno manje resursa.
  • Strukturirana konkurentnost: Hijerarhijska struktura kreiranja korutina (roditelj-potomak) olakšava upravljanje otkazivanjem zadataka i obradom grešaka.
  • Suspending Functions: Ključna reč suspend omogućava da se funkcija privremeno zaustavi bez blokiranja niti, a zatim nastavi.
  • Kanali (Channels): Omogućavaju siguran način komunikacije između korutina putem prenosa podataka.
    // Primer korišćenja Channel
    import kotlinx.coroutines.*
    import kotlinx.coroutines.channels.*
    
    fun main() = runBlocking {
        val channel = Channel<Int>()
        launch { // Pošiljalac
            for (x in 1..5) channel.send(x * x)
            channel.close() // Zatvaranje kanala nakon slanja
        }
        // Primaoc
        for (y in channel) {
            println(y)
        }
        println("Gotovo!")
    }
    
  • Flow (Tokovi podataka): Predstavljaju hladne asinhrone tokove podataka koji mogu emitovati više vrednosti. Slično RxJava Observable, ali sa boljom integracijom sa korutinama.
    // Primer korišćenja Flow
    import kotlinx.coroutines.*
    import kotlinx.coroutines.flow.*
    
    fun main() = runBlocking {
        flow { // Kreiranje Flow
            for (i in 1..3) {
                delay(100) // Simulacija asinhronog rada
                emit(i) // Emitovanje vrednosti
            }
        }.collect { value -> // Prikupljanje vrednosti
            println(value)
        }
    }
    
  • Dispečeri (Dispatchers): Određuju bazene niti na kojima će se izvršavati korutine.
    • Dispatchers.Default: Za teške računarske zadatke.
    • Dispatchers.IO: Za ulazno-izlazne operacije.
    • Dispatchers.Main: Za ažuriranje UI (dostupno na platformama sa UI petljom).
    • Dispatchers.Unconfined: Nije ograničen na određenu nit.
  • Selektori (Select): Omogućavaju čekanje na završetak više asinhronih operacija i izvršavanje akcije po završetku prve.

Naravno, u Kotlinu se može raditi i sa tradicionalnim Java nitima (java.lang.Thread), ali su korutine preferirani pristup za asinhronu i konkurentnu obradu podataka u većini slučajeva.