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