Sobes.tech
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ı:

  1. 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)
        }
    }
    
  2. 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")
    }
    
  3. Veri erişiminin senkronizasyonu: Seri kuyruklar veya DispatchQueue.concurrentPerform kullanı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