Sobes.tech
Middle

Kotlin parallel hisoblashlar bilan ishlash uchun qanday mexanizmlar taqdim etadi?

sobes.tech AI

AIdan javob

  • Coroutines (Coroutines): Yengil vaznli oqimlar bo'lib, ular asinxron kodni imperativ uslubda yozishga imkon beradi va bloklovchi chaqiruvlardan qochadi. Qayta boshlanadigan funksiyalarga asoslangan va nativ oqimlarga bog'liq emas.
  • Dispatchers: Korutina bajariladigan oqim yoki oqimlar havuzini belgilaydi.
    • Dispatchers.Default: Resurslarni ko'p sarflaydigan vazifalar uchun (masalan, CPU-ga bog'liq).
    • Dispatchers.IO: Kiritish/chiqish operatsiyalari uchun (masalan, tarmoq so'rovlar, fayllar bilan ishlash).
    • Dispatchers.Main: Kodni asosiy oqimda bajarish uchun (masalan, Android ilovasida UI yangilash).
    • Dispatchers.Unconfined: Korutina hozirgi oqimda bajariladi, suspend-funksiyaga birinchi chaqiruvingacha.
  • Suspend-funksiyalar: To'xtatilishi va keyinchalik davom ettirilishi mumkin bo'lgan funksiyalar. suspend modifikatori bilan belgilangan.
  • Context: Korutina haqida ma'lumotlarni o'z ichiga oladi, masalan, dispatcher, job va istisno ishlovchi.
  • Job: Korutinaning hayot aylanishini ifodalaydi (ishga tushirilgan, faol, tugagan, bekor qilingan). Korutina boshqarish imkonini beradi (bekor qilish, tugashini kutish).
  • Scope: Korutinalar uchun doira belgilaydi va ularning hayot aylanishini boshqaradi.
  • MutableStateFlow / SharedFlow: kotlinx.coroutines.flow kutubxonasida, korutinalar o'rtasida xavfsiz ma'lumot almashishni ta'minlaydi.
  • Mutex: Kritik bo'limlarni himoya qilish uchun sinxronizatsiya primitive.
import kotlinx.coroutines.*

fun main() = runBlocking {
    // Korutinalar va dispatcher misoli
    val job = launch(Dispatchers.Default) {
        repeat(5) { i ->
            println("Ishchi korutina: $i")
            delay(100) // Bloklamaydigan kechikish
        }
    }
    println("Korutina ishga tushirildi")
    job.join() // Korutina tugashini kutish
    println("Korutina tugatildi")
}
// Suspend-funksiya misoli
suspend fun fetchData(): String {
    delay(1000) // Tarmoq so'rovini simulyatsiya qilish
    return "Ma'lumotlar olindi"
}
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock

val mutex = Mutex()
var counter = 0

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