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