Middle
Kādi rīki ir pieejami Grand Central Dispatch (GCD)?
sobes.tech AI
Atbilde no AI
Galvenie GCD rīki:
- Dispečera rindas (Dispatch Queues): Kontrolē koda bloku izpildi. Tās var būt:
- Sekvencē (Serial): izpilda uzdevumus pa vienam, nodrošinot kārtību.
- Paralēlas (Concurrent): izpilda uzdevumus vienlaikus (ierobežojot pieejamos sistēmas resursus).
- Globālās paralēlās rindas (Global Concurrent Queues): Sistēmas nodrošinātas, ar iepriekš noteiktiem prioritātes līmeņiem (QoS).
- Galvenā rinda (Main Queue): Īpaša sekvencēta rinda, kas ir saistīta ar galveno pavedienu. To izmanto UI darbam.
- Dispečera grupas (Dispatch Groups): Ļauj uzraudzīt asinhrono uzdevumu pabeigšanu.
- Barjeru semantika (Barrier Semantics): Paralēlām rindām, ļauj izveidot "barjeru", pēc kuras tiek izpildīti tikai uzdevumi, kas ir pēc barjeras, kamēr barjera nav pārvarēta.
- Dispečera avoti (Dispatch Sources): Ļauj reaģēt uz sistēmas notikumiem (failu operācijas, signāli, taimeri utt.).
- DispatchWorkItem: Ietver koda bloku un to var nosūtīt rindā, atcelt un saņemt paziņojumu par pabeigšanu.
Piemērs, kā izveidot sekvencētu rindu un izpildīt uzdevumu:
let serialQueue = DispatchQueue(label: "com.example.serialQueue")
serialQueue.async {
// Izpildās asinhroni sekvencē
print("Uzdevums izpildīts sekvencē")
}
Piemērs, kā izmantot dispečera grupu:
let group = DispatchGroup()
let concurrentQueue = DispatchQueue(label: "com.example.concurrentQueue", attributes: .concurrent)
group.enter() // Ieeja grupā
concurrentQueue.async {
// Uzdevums 1
print("Uzdevums 1 pabeigts")
group.leave() // Iziet no grupas
}
group.enter() // Ieeja grupā
concurrentQueue.async {
// Uzdevums 2
print("Uzdevums 2 pabeigts")
group.leave() // Iziet no grupas
}
group.notify(queue: .main) {
// Izpildās pēc visu uzdevumu pabeigšanas
print("Visi uzdevumi grupā pabeigti")
}
Piemērs, kā izmantot DispatchWorkItem:
let workItem = DispatchWorkItem {
print("WorkItem izpildīts")
}
DispatchQueue.global().async(execute: workItem)
// workItem.cancel() // Var atcelt pirms izpildes