Middle
Grand Central Dispatch (GCD) içinde hangi araçlar mevcut?
sobes.tech yapay zeka
AI'dan gelen yanıt
GCD’nin temel araçları:
- Dispatch Kuyrukları: Kod bloklarının yürütülmesini yönetirler. Şunlar olabilir:
- Seri (Serial): Görevleri sırayla yürütür, sıralamayı garanti eder.
- Eşzamanlı (Concurrent): Görevleri aynı anda yürütür (mevcut sistem kaynakları dahilinde).
- Global Eşzamanlı Kuyruklar: Sistem tarafından sağlanır, önceden tanımlanmış önceliklere sahiptirler (hizmet kalitesi sınıfları - QoS).
- Ana Kuyruk (Main Queue): Uygulamanın ana akışına bağlı özel bir seri kuyruk. UI ile çalışmak için kullanılır.
- Dispatch Grupları: Asenkron görevlerin tamamlanmasını izlemeye olanak tanır.
- Barikat Semantiği: Eşzamanlı kuyruklar için, bir "barikat" oluşturmayı sağlar, bu barikat sonrası eklenen görevler, barikat aşılana kadar yürütülmez.
- Dispatch Kaynakları: Sistem olaylarına (dosya işlemleri, sinyaller, zamanlayıcılar vb.) tepki vermeyi sağlar.
- DispatchWorkItem: Bir kod bloğunu sarmalar ve kuyruğa gönderilebilir, iptal edilebilir ve tamamlandığında bildirilir.
Seri bir kuyruk oluşturma ve görev yürütme örneği:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
serialQueue.async {
// Asenkron olarak seri kuyrukta yürütülür
print("Seri kuyrukta görev tamamlandı")
}
Dispatch grubunun kullanımı örneği:
let group = DispatchGroup()
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
group.enter() // Gruba giriş
concurrentQueue.async {
// Görev 1
print("Görev 1 tamamlandı")
group.leave() // Gruftan çıkış
}
group.enter() // Gruba giriş
concurrentQueue.async {
// Görev 2
print("Görev 2 tamamlandı")
group.leave() // Gruftan çıkış
}
group.notify(queue: .main) {
// Tüm görevler tamamlandıktan sonra çalışır
print("Tüm görevler tamamlandı")
}
DispatchWorkItem kullanımı örneği:
let workItem = DispatchWorkItem {
print("WorkItem yürütüldü")
}
DispatchQueue.global().async(execute: workItem)
// workItem.cancel() // Yürütmeden önce iptal edilebilir