GCD (Grand Central Dispatch) nədir və iOS inkişafında necə istifadə olunur?
sobes.tech Süni İntellekt
AI-dan cavab
GCD (Grand Central Dispatch) — bu texnologiya aşağı səviyyəli paralelliyi Apple-dən, C əsasında qurulmuş, lakin Swift və Objective-C-də rahat qabıqla təmin edən. O, iş elementləri (work items) və onların asinxron və ya sinxron icrasını mövcud prosessor nüvələrində idarə edən mexanizmi təqdim edir.
Əsas GCD konseptləri:
-
Dispatch Queue-lər: Tapşırıqları yerinə yetirmək üçün növbələr. İki növü var:
- Serial Queue-lər: Tapşırıqlar ardıcıl olaraq yerinə yetirilir. Ümumi resurslara girişdə yarış vəziyyətlərinin qarşısını alır.
- Concurrent Queue-lər: Tapşırıqlar paralel olaraq yerinə yetirilir (amma onların başlaması və tamamlanma sırası təmin edilmir). Müstəqil tapşırıqları yerinə yetirmək üçün istifadə olunur.
- Main Queue: Xüsusi ardıcıl növbə, tətbiqin əsas axını ilə əlaqələndirilmişdir. UI yeniləmələri üçün istifadə olunur. UI ilə əlaqəli bütün tapşırıqlar bu növbədə yerinə yetirilməlidir.
-
Work Items (Closures/Blocks): Yerinə yetiriləcək ayrı-ayrı tapşırıq blokları.
-
Dispatch Group: Tapşırıqları qruplaşdırmağa və hamısı tamamlandıqda bildiriş almağa imkan verir.
-
Dispatch Semaphores: Məhdud resurslara girişin idarə olunması üçün sinxronizasiya primitivi.
iOS inkişafında istifadəsi:
-
Ağır əməliyyatların fon rejimində yerinə yetirilməsi: Şəbəkə sorğuları, şəkil emalı, verilənlər bazası ilə işləmə kimi tapşırıqları əsas növbədən (main queue) fon növbələrinə (məsələn, qlobal concurrent queues) köçürmək UI-nin bloklanmasının qarşısını almaq üçün.
// Asinxron tapşırığın qlobal paralel növbədə yerinə yetirilməsi DispatchQueue.global(qos: .userInitiated).async { // Ağır əməliyyat let result = performHeavyOperation() // UI-ni əsas axında yeniləmək DispatchQueue.main.sync { updateUI(with: result) } } -
UI yeniləməsi: Həmişə istifadəçi interfeysinin dəyişdirilməsi əməliyyatlarını main queue-də yerinə yetirmək.
// UI-ni əsas axında yeniləmək DispatchQueue.main.async { self.label.text = "Yeniləndi!" } -
Məlumatlara girişin serializasiyası: Ümumi dəyişən resurslara sinxron giriş üçün istifadəçi tərəfindən yaradılmış ardıcıl növbələrdən istifadə.
// Sinxron giriş üçün serial növbə nümunəsi let dataAccessQueue = DispatchQueue(label: "com.myapp.dataaccess") func updateSharedData(newValue: Int) { dataAccessQueue.async { // Ümumi məlumatların təhlükəsiz dəyişdirilməsi sharedData = newValue } } -
Tapşırıqların qruplaşdırılması: Bir neçə asinxron tapşırığın tamamlanmasını gözləmək və sonra növbəti addıma keçmək.
// Tapşırıq qrupu let group = DispatchGroup() group.enter() // 1-ci tapşırığın başlanğıcı performAsyncOperation1 { print("Tapşırıq 1 tamamlandı") group.leave() } group.enter() // 2-ci tapşırığın başlanğıcı performAsyncOperation2 { print("Tapşırıq 2 tamamlandı") group.leave() } // Bütün tapşırıqlar tamamlandıqda bildiriş group.notify(queue: .main) { print("Bütün tapşırıqlar tamamlandı, UI yenilənir") // UI yeniləməsi } -
Gecikdirilmiş yerinə yetirmə: Kodun müəyyən bir vaxt keçdikdən sonra yerinə yetirilməsi.
// 2 saniyə sonra gecikdirilmiş yerinə yetirmə DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { print("2 saniyə sonra başladıldı") }
GCD çox nüvəli prosessorlardan səmərəli istifadə və ənənəvi (məsələn, Thread) ilə müqayisədə daha yüksək səviyyəli və effektiv çoxluq idarəetmə yanaşması təmin edir.