Sobes.tech
Middle

iOS'ta çok iş parçacıklı programlamada küresel kuyruğu anlatın.

sobes.tech yapay zeka

AI'dan gelen yanıt

Grand Central Dispatch (GCD) içindeki Global Queue (Küme), tüm uygulamalara erişilebilir önceden tanımlanmış sistem kuyruklarıdır. Bunlar eşzamanlı kuyruklar olup, içlerindeki görevler farklı iş parçacıklarında paralel olarak yürütülebilir.

Ana özellikler:

  • Türler: Hizmet kalitesi seviyesine (QoS - Quality of Service) göre değişir.
  • QoS: Görevlerin yürütme önceliğini belirler ve sistemin hangi görevleri daha hızlı tamamlaması gerektiğine etki eder.
  • Eşzamanlılık: Aynı anda birden fazla görevi yürütmelerine izin verir.
  • Sistem: İşletim sistemi tarafından oluşturulur ve yönetilir.

Global kuyrukların türleri (öncelik sırasına göre azalan):

QoS Seviyesi Açıklama
userInteractive Kullanıcı arayüzünü doğrudan etkileyen görevler (animasyonlar, olaylar).
userInitiated Kullanıcı tarafından başlatılan, ancak UI’yi engellemeyen görevler (içerik yükleme).
default Açıkça QoS belirtilmeyen varsayılan seviye.
utility Çalışma süresi gerektiren, ancak UI’yi hemen etkilemeyen görevler (büyük dosyalar yükleme).
background Arka planda yürütülen, kullanıcı tarafından görünmeyen görevler (veri senkronizasyonu).
unspecified Nadiren kullanılır, QoS önemli değilse. default ile eşdeğerdir.

Global kuyruklara erişim:

// Belirli bir QoS seviyesine sahip küme erişimi
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)

// Varsayılan küme erişimi
let defaultQueue = DispatchQueue.global()

Görevleri yürütmek için global kuyrukların kullanımı:

// Arka planda asenkron görev yürütme
DispatchQueue.global(qos: .background).async {
    // UI’yi engellemeyen uzun süren kod
}

// Daha az yaygın olan senkron görev yürütme
DispatchQueue.global(qos: .userInitiated).sync {
    // Mevcut iş parçacığının devam etmeden önce tamamlaması gereken kod
}

Önemli noktalar:

  • Kullanıcı arayüzünü doğrudan etkileyen görevler, global kuyruklarda (userInteractive hariç) yürütülmemelidir. UI güncellemeleri için ana kuyruk (DispatchQueue.main) kullanılmalıdır.
  • Global kuyruklar paralel yürütme içindir. Görevlerin yürütülme sırası garanti edilmez.
  • sync kullanıldığında, mevcut iş parçacığı görev tamamlanana kadar bloke olur. Bu, ana iş parçacığından çağrılırsa UI’nin donmasına neden olabilir.