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:
-
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) } } -
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") } -
Məlumatlara girişin sinxronlaşdırılması: Serial növbələr və ya
DispatchQueue.concurrentPerformistifadə 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 |