Sobes.tech
Middle

Kotlin paralel hesablamalar ilə işləmək üçün hansı mexanizmləri təqdim edir?

sobes.tech Süni İntellekt

AI-dan cavab

  • Koruletlər (Coroutines): Yüngül çəkili axınlar, asinxron kodu imperativ üslubda yazmağa imkan verir və bloklayan çağırışlardan qaçınır. Yenidən başlatıla bilən funksiyalara əsaslanır və yerli axınlara bağlı deyil.
  • Dispatchers: Korutinanın icra olunacağı axın və ya axın hovuzunu müəyyən edir.
    • Dispatchers.Default: Resurs tələb edən tapşırıqlar üçün (məsələn, CPU-bound).
    • Dispatchers.IO: Giriş/çıxış əməliyyatları üçün (məsələn, şəbəkə sorğuları, fayllarla işləmək).
    • Dispatchers.Main: Kodun əsas axında icrası üçün (məsələn, Android tətbiqində UI yeniləməsi).
    • Dispatchers.Unconfined: Korutinanı cari axında ilk suspend funksiyasına qədər icra edir.
  • Suspend-funksiyalar: Dayandırıla və daha sonra davam etdirilə bilən funksiyalar. suspend modifieri ilə işarələnir.
  • Context: Korutina haqqında məlumatları ehtiva edir, məsələn, dispatcher, job və istisna işləyici.
  • Job: Korutinanın həyat dövrünü təmsil edir (başlatdı, aktiv, tamamlandı, ləğv edildi). Korutinanı idarə etməyə imkan verir (ləğv et, tamamlanmasını gözlə).
  • Scope: Korutinalar üçün sahəni müəyyən edir və onların həyat dövrünü idarə edir.
  • MutableStateFlow / SharedFlow: kotlinx.coroutines.flow kitabxanasında, korutinalar arasında təhlükəsiz məlumat mübadiləsini təmin edir.
  • Mutex: Kritik bölmələri qorumaq üçün sinxronizasiya primitive.
import kotlinx.coroutines.*

fun main() = runBlocking {
    // Korutinalar və dispatcher nümunəsi
    val job = launch(Dispatchers.Default) {
        repeat(5) { i ->
            println("İş korutinası: $i")
            delay(100) // Bloklamayan gecikmə
        }
    }
    println("Korutina başlatıldı")
    job.join() // Korutinanın tamamlanmasını gözləyir
    println("Korutina tamamlandı")
}
// Suspend-funksiyası nümunəsi
suspend fun fetchData(): String {
    delay(1000) // Şəbəkə sorğusunun simulyasiyası
    return "Məlumatlar alındı"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock

val mutex = Mutex()
var counter = 0

suspend fun incrementCounter() {
    mutex.withLock {
        counter++
    }
}