Sobes.tech
Junior

iOS inkişaf kontekstində GCD (Grand Central Dispatch) nədir?

sobes.tech Süni İntellekt

AI-dan cavab

GCD (Grand Central Dispatch) — bu Apple tərəfindən təqdim olunan aşağı səviyyəli API-dir, tətbiqlərdə paralel əməliyyatların idarə olunması və kodun asinxron icrasını təmin edir. O, sistem tərəfindən idarə olunan icra növbələrinə tapşırıqları göndərmək mexanizmini təqdim edir.

Əsas xüsusiyyətlər:

  • Tapşırıq növbələri (Dispatch Queues): FIFO strukturlarıdır, burada kod blokları (closures) əlavə olunur və icra üçün göndərilir.
    • Onlar konkurrent (paralel) və serial (sıralı) növlərdən ibarətdir.
    • Sistemə məxsus qlobal növbələr təqdim edir və istifadəçi tərəfindən xüsusi növbələr yarada bilər.
  • Bloklar (Blocks): növbələrə göndərilən iş vahidləridir.
  • İş parçacığı idarəetməsi: inkişaf etdiricini birbaşa iş parçacığı idarəetməsindən azad edir, sistem isə mövcud prosessor nüvələri arasında tapşırıqları optimal şəkildə paylayır.
  • Prioritetlər: sistemin qlobal konkurrent növbələrində tapşırıqlar üçün prioritet təyin etməyə imkan verir.

Növ növbələr:

  • Serial (sıralı): tapşırıqları dəqiq bir şəkildə, əlavə olunma ardıcıllığında icra edir. Bu növbədən yalnız bir tapşırığın hər zaman icra olunmasını təmin edir.
    • Əsas növbə (DispatchQueue.main) UI yeniləmələri üçün xüsusi serial növbədir.
    • İstifadəçi tərəfindən yaradılan serial növbələr.
  • Konkurrent (paralel): bir vaxtda bir neçə tapşırığı icra edə bilər (paralel), tamamlanma ardıcıllığını təmin etmir.
    • Sistem qlobal konkurrent növbələri müxtəlif QoS (Xidmət Keyfiyyəti) səviyyələri ilə.
    • İstifadəçi tərəfindən yaradılan konkurrent növbələr.

Qlobal konkurrent növbələr üçün QoS (Xidmət Keyfiyyəti) səviyyələri:

QoS Səviyyəsi Təsviri İstifadə nümunələri
userInteractive İstifadəçi ilə aktiv qarşılıqlı əlaqədə olan tapşırıqlar. Animasiya, UI hadisələrinin işlənməsi.
userInitiated İstifadəçi tərəfindən başlatılan və dərhal nəticə tələb edən tapşırıqlar. Məzmun yükləmə, düyməyə basıldıqda.
utility Uzun müddət davam edən və dərhal nəticə tələb etməyən tapşırıqlar. Məlumatların yüklənməsi, fon rejimində şəkil emalı.
background Fon rejimində olan və istifadəçidən gizli tapşırıqlar. Keşin yenilənməsi, məlumatların sinxronizasiyası.
unspecified QoS səviyyəsi göstərilməyib, sistem özü müəyyən edir. Köhnə API-lər və aşağı səviyyəli sistem tapşırıqları.

Sadə istifadə nümunəsi:

// Fon rejimində tapşırıq icra et (qlobal konkurrent növbə)
DispatchQueue.global(qos: .userInitiated).async {
    // Uzun müddətli əməliyyatı yerinə yetir
    print("Fon tapşırığı yerinə yetirilir")

    // UI yeniləməsi üçün əsas thread-ə qayıt
    DispatchQueue.main.async {
        print("UI əsas thread-də yenilənir")
    }
}

GCD çoxlu iş parçacığı və paralelliyi sadələşdirir, kodu daha oxunaqlı və aşağı səviyyəli iş parçacığı idarəetməsinə nisbətən race condition səhvlərinə daha az meylli edir (Thread).