Middle
Grand Central Dispatch nedir ve iOS geliştirmede nasıl kullanılır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Grand Central Dispatch (GCD) — çok seviyeli API, çok iş parçacığını yönetmek için sistem iş parçacık havuzunu sağlayan ve görevlerin bunlar üzerinde yürütülmesini planlayan düşük seviyeli bir API'dir.
GCD'nin temel kavramları:
- Dispatch Kuyrukları: Kod bloklarının (görevlerin) yürütülmek üzere konulduğu kuyruklar.
- Seri Kuyruklar: Eklenme sırasına göre, biri bitince diğeri başlar şekilde, blokları sırayla yürütür.
- Eşzamanlı Kuyruklar: Blokları paralel olarak yürütür, ancak eklenme sırasına göre.
- Görevler (Bloklar): Dispatch kuyruklarına gönderilen çalışma birimleri.
- Dispatch Kaynakları: Sistem olaylarının (dosyalar, soketler, sinyaller) izlenmesi, olaylar gerçekleştiğinde blokların yürütülmesini çağırır.
Kullanım alanları:
-
Arka plan işlemlerinin yürütülmesi: Ağdan veri yükleme, görüntü işleme, karmaşık hesaplamalar, ana akışın (UI) engellenmemesi için.
DispatchQueue.global(qos: .userInitiated).async { // Kaynak yoğun işlemi yürüt let processedData = performHeavyProcessing() DispatchQueue.main.async { // UI'yi ana akışta güncelle updateUI(with: processedData) } } -
Görev planlaması: Gecikmeli veya periyodik yürütme.
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Bu kod 2 saniye sonra çalışacak print("Gecikmeli yürütme") } -
Veri erişiminin senkronizasyonu: Seri kuyruklar veya
DispatchQueue.concurrentPerformkullanımıyla paralel erişimi kontrol etme.let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent) var sharedArray = [Int]() func addItem(_ item: Int) { syncQueue.async(flags: .barrier) { // Yazarken özel erişim için .barrier kullanımı sharedArray.append(item) } } func processItems() { syncQueue.sync { // Senkron okuma for item in sharedArray { print(item) } } }
POSIX iş parçacıklarıyla (thread) karşılaştırıldığında avantajlar:
- Kullanım kolaylığı: Daha yüksek seviyeli soyutlama.
- Verimlilik: GCD, sistem iş parçacığı havuzunu daha verimli yönetir, maliyetleri azaltır.
- Ölçeklenebilirlik: İşlemci çekirdek sayısına otomatik uyum sağlar.
QoS (Hizmet Kalitesi) Türleri: GCD planlayıcısı için görevin önceliğini belirler.
| QoS | Uygulama |
|---|---|
| userInteractive | UI güncellemeleri, animasyonlar, hızlı yanıt |
| userInitiated | Kullanıcı tarafından başlatılan, hızlı tamamlanması gereken görevler (yükleme, fotoğraf işleme) |
| default | Varsayılan öncelik, userInitiated ve utility arasında |
| utility | Uzun süren, aciliyet gerektirmeyen görevler (yükleme, indeksleme) |
| background | Kullanıcı tarafından görünmeyen görevler (yedekleme, arka plan senkronizasyonu) |
| unspecified | Belirtilmemiş öncelik, sistem tarafından belirlenir |