Sobes.tech
Junior

iOS dasturlash kontekstida GCD (Grand Central Dispatch) nima?

sobes.tech AI

AIdan javob

GCD (Grand Central Dispatch) — bu Apple tomonidan taqdim etilgan past darajali API bo‘lib, ilovalarda parallel operatsiyalarni boshqarish va kodni asinxron bajarishni ta’minlaydi. U vazifalarni bajarish uchun navbatlarga yuborish mexanizmini taqdim etadi, ular tizim tomonidan boshqariladi.

Asosiy xususiyatlar:

  • Vazifa navbatlari (Dispatch Queues): FIFO tuzilmalar bo‘lib, ularga kod bloklari (closures) qo‘shiladi.
    • Ular concurrent (parallel) va serial (ketma-ket) tiplarga bo‘linadi.
    • Tizimning global navbatlarini taklif qiladi va foydalanuvchi navbatlarini yaratishga imkon beradi.
  • Bloklar (Blocks): navbatlarga yuboriladigan ish birliklari.
  • Threadlarni boshqarish: dasturchini to‘g‘ridan-to‘g‘ri threadlarni boshqarishdan ozod qiladi, tizim mavjud protsessor yadrolariga vazifalarni optimal tarzda taqsimlash imkonini beradi.
  • Prioritetlar: tizimning global concurrent navbatlarida vazifalar uchun prioritet belgilash imkonini beradi.

Navbat turlari:

  • Serial (ketma-ket): vazifalarni qat’iy ravishda birma-bir, ularning qo‘shilish tartibida bajaradi. Bu navbatdan faqat bitta vazifa har doim bajarilishini kafolatlaydi.
    • Asosiy navbat (DispatchQueue.main) UI yangilash uchun maxsus serial navbat.
    • Foydalanuvchi tomonidan yaratilgan serial navbatlar.
  • Concurrent (parallel): bir vaqtning o‘zida bir nechta vazifalarni bajarishi mumkin (parallel), bajarilish tartibi kafolatlanmaydi.
    • Tizimning global concurrent navbatlari turli QoS (Xizmat Sifati) darajalari bilan.
    • Foydalanuvchi tomonidan yaratilgan concurrent navbatlar.

Global concurrent navbatlar uchun QoS (Xizmat Sifati) darajalari:

QoS Darajasi Tavsifi Foydalanish misollari
userInteractive Foydalanuvchi bilan faol aloqada bo‘lgan vazifalar. Animatsiyalar, UI voqealarini ishlash.
userInitiated Foydalanuvchi tomonidan boshlagan va darhol natija talab qiladigan vazifalar. Kontentni yuklash, tugma bosilganda.
utility Uzoq davom etadigan va darhol natija talab qilmaydigan vazifalar. Ma’lumotlarni yuklash, fon rejimida rasmni qayta ishlash.
background Foydalanuvchidan yashirin fon vazifalari. Keshni yangilash, ma’lumotlarni sinxronlashtirish.
unspecified QoS darajasi ko‘rsatilmagan, tizim uni o‘zi belgilaydi. Eski API yoki past darajali tizim vazifalari.

Oddiy misol:

// Fon rejimida vazifa bajarish (global concurrent navbat)
DispatchQueue.global(qos: .userInitiated).async {
    // Uzoq davom etadigan operatsiyani bajarish
    print("Fon vazifasi bajarilmoqda")

    // UI yangilash uchun asosiy threadga qaytish
    DispatchQueue.main.async {
        print("UI yangilash asosiy threadda")
    }
}

GCD ko‘p threadli va parallel ishlashni soddalashtiradi, kodni o‘qilishi osonroq qiladi va past darajali thread boshqarish bilan solishtirganda race condition xatolariga kamroq moyil qiladi (Thread).