Sobes.tech
Middle

Kotlin-də çoxmərhələliyi necə həyata keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də çoxmərhələli işləmə müxtəlif üsullarla həyata keçirilə bilər:

  1. Java standart ipleri (Threads):

    // Runnable interfeysini həyata keçirmək
    class MyRunnable : Runnable {
        override fun run() {
            // Ayrı bir ipdə icra olunacaq kod
            println("Ip-dən salam: ${Thread.currentThread().name}")
        }
    }
    
    fun main() {
        // Runnable nümunəsi yarat
        val runnable = MyRunnable()
        // Runnable ilə Thread obyekti yaradın
        val thread = Thread(runnable)
        // İpi işə salın
        thread.start()
    }
    

    Yaxud lambda ifadəsi ilə:

    fun main() {
        val thread = Thread {
            // Ayrı bir ipdə icra olunacaq kod
            println("Ip-dən salam: ${Thread.currentThread().name}")
        }
        thread.start()
    }
    
  2. Kotlin Korutinaları: Bu, tövsiyə olunan və daha müasir yanaşmadır, yüngül çoxmərhələli işləmə təmin edir.

    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        // Qlobal scope-də yeni korutina yaradın
        launch {
            delay(1000L) // Bloklamayan gecikmə
            println("Korutinalardan salam")
        }
        // Əsas ip işləməyə davam edir
        println("Əsas ipdən salam")
        // runBlocking, bütün uşaq korutinaların tamamlanmasını gözləyir
    }
    

    Müxtəlif korutina qurucularının nümunələri:

    • launch: Yeni korutina başlayır, geri dönüş dəyəri yoxdur.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        launch {
            println("Bu korutina sadəcə bir əməliyyat yerinə yetirir")
        }
    }
    
    • async: Yeni korutina başlayır və Deferred vasitəsilə nəticə qaytarır.
    import kotlinx.coroutines.*
    
    fun main() = runBlocking {
        val deferredResult = async {
            delay(1000L)
            "Korutina nəticəsi"
        }
        val result = deferredResult.await() // Nəticəni gözləyir
        println(result)
    }
    
  3. RxKotlin/RxJava: Reaktiv proqramlaşdırma, asinxron əməliyyatlar və çoxmərhələli işləmə ilə işləməyə imkan verir, planlayıcılar (Schedulers) istifadə edilərək.

    import io.reactivex.rxjava3.core.Observable
    import io.reactivex.rxjava3.schedulers.Schedulers
    
    fun main() {
        Observable.just("Asinxron element")
            .subscribeOn(Schedulers.io()) // I/O ipdə abunə ol
            .observeOn(Schedulers.computation()) // Hesablama ipində nəticələri müşahidə et
            .subscribe { item ->
                println("Alındı: $item ip ${Thread.currentThread().name} da")
            }
    
        Thread.sleep(2000) // Asinxron əməliyyatların tamamlanmasını gözləyir
    }
    

Yöntəm seçimi konkret tapşırığa bağlıdır. Kotlin-in müasir tətbiqlərinin çoxu üçün, korutinalar onların yüngüllüyü, istifadəsinin asanlığı və dilə daxili dəstəyi səbəbindən üstün tutulur. Java ipleri aşağı səviyyəli nəzarət üçün uyğun ola bilər, reaktiv kitabxanalar isə məlumat axınları ilə işləmək üçün istifadə olunur.