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 (
userInteractivehariç) 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.
synckullanı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.