Sobes.tech
Middle

Kotlin hansı çox ipli elementləri təmin edir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin aşağıdakı çoxluq elementlərini təqdim edir:

  • Korutinalar: Yüngül çəkili axınlar, dayandırıla bilən funksiyalara əsaslanır. Asinxron və qeyri-bloklama icra təmin edir.
  • Korutin qurucuları: Korutinləri işə salan funksiyalar. Əsaslar: launch (dəyər qaytarmadan korutin işə salır), async (korutin işə salır və Deferred qaytarır, onu nəticə üçün gözləmək olar).
    // launch istifadəsi nümunəsi
    GlobalScope.launch {
        println("Salam korutinadan ${Thread.currentThread().name}")
    }
    
    // async istifadəsi nümunəsi
    val deferred = GlobalScope.async {
        delay(1000) // Uzun əməliyyatı simulyasiya edir
        "Nəticə"
    }
    val result = runBlocking { deferred.await() } // Nəticəni gözləyirik
    
  • Dispatchers: Korutinanın hansı işçi hovuzunda icra olunacağını müəyyən edir. Əsaslar:
    • Dispatchers.Default: CPU intensiv tapşırıqlar üçün ümumi işçi hovuzu.
    • Dispatchers.IO: Giriş/çıxış əməliyyatları üçün işçi hovuzu.
    • Dispatchers.Main: İstifadəçi interfeysi üçün işçi hovuzu (Android, Swing və s.).
    • Dispatchers.Unconfined: Korutina hazırkı işçi üzərində başlayır, amma hər hansı işçiyə davam edə bilər.
    GlobalScope.launch(Dispatchers.IO) {
        // Giriş/çıxış əməliyyatları
    }
    
  • runBlocking: Korutin qurucu funksiyası, hazırkı işçini bloklayır korutina tamamlanana qədər. Bloklayan və qeyri-bloklayan kodu birləşdirmək üçün istifadə olunur, testlərdə və əsas funksiyalarda çox istifadə olunur.
    runBlocking {
        launch {
            delay(500)
            println("Tamamlandı ${Thread.currentThread().name} üzərində")
        }
        println("İşə salındı ${Thread.currentThread().name} üzərində")
    }
    
  • suspend funksiyalar: Dayandırıla və yenidən başlatıla bilən funksiyalar. Yalnız digər suspend funksiyalar və ya korutin qurucuları tərəfindən çağırıla bilər.
    suspend fun doSomething() {
        delay(100) // Dayandırma nümunəsi
    }
    
  • Job: İşə salınmış korutinanın handle-i. Korutinanın həyat dövrünü idarə etmək üçün metodlar təqdim edir (ləğv etmək, tamamlanmasını gözləmək).
    val job = GlobalScope.launch {
       // Uzun əməliyyat
    }
    job.cancel() // Korutinanı ləğv edir
    runBlocking { job.join() } // Tamamlanmasını gözləyir
    
  • CoroutineScope: Korutinlər üçün görünürlük sahəsini müəyyən edir. Bu sahədə işə salınan korutinalar sahənin ləğv olunması ilə avtomatik ləğv olunur. Həyat dövrünü idarə etməyə kömək edir.
    val scope = CoroutineScope(Dispatchers.Default)
    scope.launch {
        // Bu sahədəki korutina
    }
    scope.cancel() // Bu sahədəki bütün korutinaları ləğv edir
    
  • Kanal (Channel): Korutinalar arasında məlumatların təhlükəsiz ötürülməsi üçün primitivi. Kanallar unidirectional (yalnız göndərmə və ya qəbul üçün) və ya bidirectional ola bilər.
    import kotlinx.coroutines.channels.Channel
    
    val channel = Channel<Int>()
    
    runBlocking {
        launch {
            for (x in 1..5) channel.send(x * x)
            channel.close() // Kanalı bağlamaq vacibdir
        }
        launch {
            for (y in channel) println(y)
        }
    }
    
  • Müütexlər (Mutex): Sinxronizasiya primitivi, ümumi resursa eksklüziv giriş təmin edir. Axın təhlükəsizliyini təmin edir, yalnız bir korutina müüteksi müəyyən vaxtda sahib ola bilər.
    import kotlinx.coroutines.sync.Mutex
    import kotlinx.coroutines.sync.withLock
    
    val mutex = Mutex()
    var counter = 0
    
    suspend fun incrementCounter() {
        mutex.withLock {
            counter++
        }
    }
    
  • Vəziyyətlər (StateFlow, SharedFlow): Məlumat axınları ilə işləmək üçün primitivi, reaktiv proqramlaşdırma və çoxlu işçi mühitində. StateFlow hazırkı vəziyyətlə "soyuq" axını təmsil edir, SharedFlow isə geniş yayım üçün "isti" axındır.