Middle
Jaké nástroje jsou k dispozici v Grand Central Dispatch (GCD)?
sobes.tech AI
Odpověď od AI
Hlavní nástroje GCD:
- Dispatchové fronty (Dispatch Queues): Řídí vykonávání bloků kódu. Mohou být:
- Sekvenční (Serial): Vykonávají úkoly jeden po druhém, zajišťují pořadí.
- Paralelní (Concurrent): Vykonávají úkoly současně (v rámci dostupných systémových zdrojů).
- Globální paralelní fronty (Global Concurrent Queues): Poskytovány systémem, mají předdefinované priority (třídy kvality služby - QoS).
- Hlavní fronta (Main Queue): Speciální sekvenční fronta spojená s hlavním vláknem aplikace. Používá se pro práci s UI.
- Dispatch skupiny (Dispatch Groups): Umožňují sledovat dokončení sady asynchronních úkolů.
- Barrier semantika (Barrier Semantics): Pro paralelní fronty, umožňuje vytvořit "bariéru", po které jsou vykonávány pouze úkoly za bariérou, dokud není překonána.
- Dispatch zdroje (Dispatch Sources): Umožňují reagovat na systémové události (operace souborů, signály, časovače atd.).
- DispatchWorkItem: Obaluje blok kódu a může být odeslán do fronty, zrušen a upozorněn na dokončení.
Příklad vytvoření sekvenční fronty a vykonání úkolu:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
serialQueue.async {
// Asynchronně vykonávané v sekvenční frontě
print("Úkol vykonán v sekvenční frontě")
}
Příklad použití dispatch skupiny:
let group = DispatchGroup()
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
group.enter() // Vstup do skupiny
concurrentQueue.async {
// Úkol 1
print("Úkol 1 dokončen")
group.leave() // Opustit skupinu
}
group.enter() // Vstup do skupiny
concurrentQueue.async {
// Úkol 2
print("Úkol 2 dokončen")
group.leave() // Opustit skupinu
}
group.notify(queue: .main) {
// Bude spuštěno po dokončení všech úkolů ve skupině
print("Všechny úkoly ve skupině dokončeny")
}
Příklad použití DispatchWorkItem:
let workItem = DispatchWorkItem {
print("WorkItem vykonán")
}
DispatchQueue.global().async(execute: workItem)
// workItem.cancel() // Může být zrušen před vykonáním