Sobes.tech
Middle

Milyen eszközök érhetők el a Grand Central Dispatch (GCD)-ben?

sobes.tech MI

Válasz az MI-től

A GCD fő eszközei:

  • Dispatch sorok (Dispatch Queues): A kódblokkok végrehajtását kezelik. Lehetnek:
    • Sorozatos (Serial): Egymás után hajtják végre a feladatokat, garantálva a sorrendet.
    • Párhuzamos (Concurrent): Egyidejűleg hajtják végre a feladatokat (a rendszer rendelkezésre álló erőforrásain belül).
  • Globális párhuzamos sorok (Global Concurrent Queues): A rendszer által biztosított, előre meghatározott prioritásokkal (szolgáltatási minőségi osztályok - QoS).
  • Fő sor (Main Queue): Egy speciális, sorozatos sor, amely a fő szálhoz van kötve az alkalmazásban. UI-val való munkára használják.
  • Dispatch csoportok (Dispatch Groups): Lehetővé teszik egy aszinkron feladatok halmazának befejezésének nyomon követését.
  • Barrier szemantika (Barrier Semantics): Párhuzamos sorok esetén lehetővé teszi egy "akadály" létrehozását, amely után csak az akadályt követő feladatok futnak, amíg az nem kerül átlépésre.
  • Dispatch források (Dispatch Sources): Lehetővé teszik a rendszer eseményekre való reagálást (fájlműveletek, jelek, időzítők stb.).
  • DispatchWorkItem: Egy kódblokkot burkol, és küldhető egy sorba, törölhető, és értesíthet a befejezéséről.

Példa egy sorozatos sor létrehozására és egy feladat végrehajtására:

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

serialQueue.async {
    // Aszinkron módon végrehajtva a sorozatos sorban
    print("Feladat végrehajtva a sorozatos sorban")
}

Példa a dispatch csoport használatára:

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

group.enter() // Belépés a csoportba
concurrentQueue.async {
    // Feladat 1
    print("Feladat 1 befejezve")
    group.leave() // Kilépés a csoportból
}

group.enter() // Belépés a csoportba
concurrentQueue.async {
    // Feladat 2
    print("Feladat 2 befejezve")
    group.leave() // Kilépés a csoportból
}

group.notify(queue: .main) {
    // A csoport összes feladatának befejezése után fut
    print("Minden feladat a csoportban befejeződött")
}

Példa a DispatchWorkItem használatára:

let workItem = DispatchWorkItem {
    print("WorkItem végrehajtva")
}

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

// workItem.cancel() // Még a végrehajtás előtt törölhető