Sobes.tech
Middle

Grand Central Dispatch nima va u iOS dasturlashda qanday ishlatiladi?

sobes.tech AI

AIdan javob

Grand Central Dispatch (GCD) — tizimli iplar ustida ishlash uchun past darajadagi API bo'lib, tizim iplarining havuzini ta'minlaydi va vazifalarni ularni bajarish uchun rejalashtiradi.

GCD ning asosiy tushunchalari:

  • Dispatch navbatlari: Kod bloklari (vazifalar) uchun joylashtiriladigan navbatlar.
    • Serial navbatlar: Qo'shilish tartibida, bittadan bajariladi.
    • Concurrent navbatlar: Parallelda bajariladi, lekin qo'shilish tartibida.
  • Vazifalar (Bloklar): Dispatch navbatlariga yuboriladigan ish birliklari.
  • Dispatch manbalari: Tizim voqealarini (fayllar, soketlar, signallar) monitoring qilish, ularning yuzaga kelishi bilan bloklarni chaqirish.

Foydalanishi:

  1. Orqa fon operatsiyalarini bajarish: Tarmoqdan ma'lumot yuklash, tasvirlarni qayta ishlash, murakkab hisoblashlar, asosiy oqimni (UI) bloklamaslik uchun.

    DispatchQueue.global(qos: .userInitiated).async {
        // Resurslarni ko'p ishlatadigan operatsiyani bajarish
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // UI ni asosiy oqimda yangilash
            updateUI(with: processedData)
        }
    }
    
  2. Vazifalarni rejalashtirish: Kechiktirilgan yoki davriy bajarish.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // Bu kod 2 soniya ichida bajariladi
        print("Kechiktirilgan bajarish")
    }
    
  3. Ma'lumotlarga kirishni sinxronlashtirish: Serial navbatlar yoki DispatchQueue.concurrentPerform yordamida parallel kirishni nazorat qilish.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // Yozishda eksklyuziv kirish uchun .barrier dan foydalanish
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // Synchronous o'qish
            for item in sharedArray {
                print(item)
            }
        }
    }
    

POSIX iplar bilan (thread) taqqoslaganda afzalliklar:

  • Foydalanish osonligi: Yuqori darajadagi abstraktsiya.
  • Samardorlik: GCD tizim iplar havuzini yanada samarali boshqaradi, xarajatlarni kamaytiradi.
  • Kattalashtirish: Avtomatik ravishda protsessor yadro soniga moslashadi.

QoS turlari (Sifatli xizmat): GCD rejalashtiruvchisi uchun vazifaning ustuvorligini belgilaydi.

QoS Qo'llanilishi
userInteractive UI yangilanishlari, animatsiyalar, tez javob
userInitiated Foydalanuvchi tomonidan boshlatilgan, tez yakunlanishi kerak bo'lgan vazifalar (yuklash, rasmni qayta ishlash)
default Standart ustuvorlik, userInitiated va utility o'rtasida
utility Uzoq davom etadigan, shoshilinch bo'lmagan vazifalar (yuklash, indekslash)
background Foydalanuvchiga ko'rinmaydigan vazifalar (zaxira nusxasi, fon sinxronizatsiya)
unspecified Ustuvorlik belgilangan emas, tizim tomonidan aniqlanadi