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.
- Əsas növbə (
- 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).