Sobes.tech
Middle

Grand Central Dispatch nədir və iOS inkişafında necə istifadə olunur?

sobes.tech Süni İntellekt

AI-dan cavab

Grand Central Dispatch (GCD) — çox səviyyəli API, çox ipliyin idarə olunması üçün sistem ip havuzunu təmin edir və tapşırıqların onların üzərində icrasını planlaşdırır.

GCD-nin əsas anlayışları:

  • Dispatch növbələri: Kod bloklarının (tapşırıqların) icrası üçün yerləşdirildiyi növbələr.
    • Serial növbələr: Əlavə olunma ardıcıllığında, bir-bir icra olunur.
    • Eyni vaxtda növbələr: Paralel icra olunur, lakin əlavə olunma ardıcıllığında.
  • Tapşırıqlar (Bloklar): Dispatch növbələrinə göndərilən iş vahidləri.
  • Dispatch mənbələri: Sistem hadisələrinin (fayllar, soketlər, siqnallar) monitorinqi, onların baş verməsi zamanı blokların icrasını çağırır.

İstifadəsi:

  1. Arxa plan əməliyyatlarının icrası: Şəbəkədən məlumat yükləmək, şəkilləri emal etmək, mürəkkəb hesablamalar, əsas axını (UI) bloklamamaq üçün.

    DispatchQueue.global(qos: .userInitiated).async {
        // Resurs tələbatlı əməliyyatın icrası
        let processedData = performHeavyProcessing()
    
        DispatchQueue.main.async {
            // UI-ni əsas axında yeniləmək
            updateUI(with: processedData)
        }
    }
    
  2. Tapşırıqların planlaşdırılması: Gecikdirilmiş və ya dövri icra.

    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        // Bu kod 2 saniyə sonra icra olunacaq
        print("Gecikdirilmiş icra")
    }
    
  3. Məlumatlara girişin sinxronlaşdırılması: Serial növbələr və ya DispatchQueue.concurrentPerform istifadə edərək paralel girişin idarə olunması.

    let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent)
    var sharedArray = [Int]()
    
    func addItem(_ item: Int) {
        syncQueue.async(flags: .barrier) { // Yazma zamanı xüsusi giriş üçün .barrier istifadə olunur
            sharedArray.append(item)
        }
    }
    
    func processItems() {
        syncQueue.sync { // Sinxron oxuma
            for item in sharedArray {
                print(item)
            }
        }
    }
    

POSIX iplikləri ilə müqayisədə üstünlüklər:

  • İstifadə rahatlığı: Yüksək səviyyəli abstraksiya.
  • Effektivlik: GCD sistem ipliklərinin hovuzunu daha səmərəli idarə edir, xərcləri azaldır.
  • Skalabilik: Avtomatik olaraq prosessor nüvələrinin sayına uyğunlaşır.

QoS (Xidmətin keyfiyyəti) növləri: GCD planlayıcısı üçün tapşırığın prioritetini müəyyən edir.

QoS Tətbiq
userInteractive UI yeniləmələri, animasiyalar, sürətli cavab
userInitiated İstifadəçi tərəfindən başlanmış, sürətli tamamlanması tələb olunan tapşırıqlar (yükləmə, şəkil emalı)
default Standart prioritet, userInitiated və utility arasında
utility Uzun müddətli, təcili olmayan tapşırıqlar (yükləmə, indeksləşdirmə)
background İstifadəçidən gizli olan tapşırıqlar (nüsxə çıxarma, fon sinxronizasiyası)
unspecified Prioritet təyin olunmayıb, sistem tərəfindən müəyyən edilir