Sobes.tech
Middle

Grand Central Dispatch (GCD)-də hansı alətlər mövcuddur?

sobes.tech Süni İntellekt

AI-dan cavab

GCD-nin əsas alətləri:

  • Dispatch növbələri (Dispatch Queues): Kod bloklarının icrasını idarə edir. Onlar ola bilər:
    • Seriyalı (Serial): Tapşırıqları bir-bir icra edir, ardıcıllığı təmin edir.
    • Eyni vaxtlı (Concurrent): Tapşırıqları eyni vaxtda icra edir (mövcud sistem resursları daxilində).
  • Qlobal eyni vaxtlı növbələr (Global Concurrent Queues): Sistem tərəfindən təmin edilir, əvvəlcədən təyin olunmuş prioritetlərə malikdirlər (xidmət keyfiyyətinin sinfləri - QoS).
  • Əsas növbə (Main Queue): Xüsusi seriyalı növbə, tətbiqin əsas axını ilə əlaqəlidir. UI ilə işləmək üçün istifadə olunur.
  • Dispatch qrupları (Dispatch Groups): Asinxron tapşırıqların tamamlanmasını izləməyə imkan verir.
  • Barier semantikas (Barrier Semantics): Eyni vaxtlı növbələr üçün, "barrier" yaratmağa imkan verir, onun ardından yalnız barrier-dən sonra yerləşdirilən tapşırıqlar icra olunur, barrier aşılana qədər.
  • Dispatch mənbələri (Dispatch Sources): Sistem hadisələrinə (fayl əməliyyatları, siqnallar, taymerlər və s.) cavab verməyə imkan verir.
  • DispatchWorkItem: Kod blokunu əhatə edir və növbəyə göndərilə bilər, ləğv oluna və tamamlandıqda bildiriş verə bilər.

Seriyalı növbə yaratmaq və tapşırıq icra etmək nümunəsi:

let serialQueue = DispatchQueue(label: "com.example.serialQueue")

serialQueue.async {
    // Asinxron olaraq seriyalı növbədə icra olunur
    print("Seriyalı növbədə tapşırıq yerinə yetirildi")
}

Dispatch qrupunun istifadəsi nümunəsi:

let group = DispatchGroup()
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)

group.enter() // Qrupa daxil oluruq
concurrentQueue.async {
    // Tapşırıq 1
    print("Tapşırıq 1 tamamlandı")
    group.leave() // Qrupu tərk edir
}

group.enter() // Qrupa daxil oluruq
concurrentQueue.async {
    // Tapşırıq 2
    print("Tapşırıq 2 tamamlandı")
    group.leave() // Qrupu tərk edir
}

group.notify(queue: .main) {
    // Bütün tapşırıqlar tamamlandıqdan sonra icra olunur
    print("Bütün tapşırıqlar qrupu tamamlandı")
}

DispatchWorkItem istifadəsi nümunəsi:

let workItem = DispatchWorkItem {
    print("WorkItem icra olundu")
}

DispatchQueue.global().async(execute: workItem)

// workItem.cancel() // İcradan əvvəl ləğv oluna bilər