Sobes.tech
Junior

iOS geliştirme bağlamında GCD (Grand Central Dispatch) nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

GCD (Grand Central Dispatch), uygulamalarda çoklu işlemleri yönetmek ve kodun asenkron yürütülmesini sağlamak için Apple tarafından sağlanan düşük seviyeli bir API'dir. Sistem tarafından yönetilen yürütme kuyruklarına görev göndermek için bir mekanizma sağlar.

Ana özellikler:

  • Görev Kuyrukları (Dispatch Queues): yürütme için kod bloklarının (closure'lar) eklendiği FIFO yapılarıdır.
    • Konkurent (eşzamanlı) ve serial (sıralı) türlerinden türemiştir.
    • Sistem genelinde küresel kuyruklar sağlar ve özel kuyruklar oluşturulmasına izin verir.
  • Bloklar (Blocks): kuyruklara gönderilen çalışma birimleri.
  • İş Parçacığı Yönetimi: geliştiriciyi doğrudan iş parçacıklarını yönetmekten soyutlar, böylece sistem mevcut işlemci çekirdeklerine göre görevleri en iyi şekilde dağıtır.
  • Öncelikler: sistemin küresel konkurent kuyruklarındaki görevlere öncelik belirlemesine olanak tanır.

Kuyruk türleri:

  • Serial (sıralı): görevleri tam anlamıyla sırayla, eklenme sırasına göre yürütür. Bu kuyruktan yalnızca bir görevin aynı anda yürütüleceğini garanti eder.
    • Ana kuyruk (DispatchQueue.main) UI güncellemeleri için özel serial kuyruktur.
    • Kullanıcı tanımlı serial kuyruklar.
  • Concurrent (eşzamanlı): aynı anda birden fazla görevi yürütebilir, tamamlanma sırası garanti edilmez.
    • Sistem genelinde farklı QoS seviyelerine sahip küresel eşzamanlı kuyruklar.
    • Kullanıcı tanımlı eşzamanlı kuyruklar.

Küresel eşzamanlı kuyruklar için hizmet kalitesi (QoS):

QoS Seviyesi Açıklama Kullanım Örnekleri
userInteractive Kullanıcıyla aktif etkileşimde olan görevler. Animasyonlar, UI olaylarının işlenmesi.
userInitiated Kullanıcı tarafından başlatılan ve anında sonuç gerektiren görevler. Butona tıklama ile içerik yükleme.
utility Uzun süren ve anında sonuç gerektirmeyen görevler. Veri yükleme, arka plan görüntü işleme.
background Kullanıcı tarafından görünmeyen arka plan görevleri. Önbellek güncelleme, veri senkronizasyonu.
unspecified QoS seviyesi belirtilmemiş, sistem kendisi belirler. Eski API'ler veya düşük seviyeli sistem görevleri.

Basit bir kullanım örneği:

// Arka planda görev yürüt (küresel eşzamanlı kuyruk)
DispatchQueue.global(qos: .userInitiated).async {
    // Uzun süren işlemi gerçekleştir
    print("Arka plan görevi gerçekleştiriliyor")

    // UI güncellemesi için ana thread'e dön
    DispatchQueue.main.async {
        print("Ana thread'de UI güncelleniyor")
    }
}

GCD, çoklu iş parçacığı ve paralel işlemlerle çalışma işini kolaylaştırır, kodu daha okunabilir ve düşük seviyeli iş parçacığı yönetimine göre race condition hatalarına karşı daha az eğilimli hale getirir (Thread gibi).