Sobes.tech
Middle

Millised tööriistad on saadaval Grand Central Dispatch (GCD)-s?

sobes.tech AI

Vastus AI-lt

GCD-i peamised tööriistad:

  • Dispetšerijärjekorrad (Dispatch Queues): Juhtivad koodiplokkide täitmist. Need võivad olla:
    • Järjepidevad (Serial): täidavad ülesandeid üks korraga, tagades järjekorra.
    • Paralleelsed (Concurrent): täidavad ülesandeid samaaegselt (piirates saadaval süsteemseid ressursse).
  • Globaalne paralleelne järjekord (Global Concurrent Queues): Süsteem pakub neid, neil on eelmääratud prioriteedid (QoS).
  • Peamine järjekord (Main Queue): Spetsiaalne järjepidev järjekord, mis on seotud rakenduse peamise vooluga. Kasutatakse kasutajaliidese (UI) tööks.
  • Dispetšerirühmad (Dispatch Groups): Annab võimaluse jälgida asünkroonsete ülesannete lõpetamist.
  • Barjääri semantika (Barrier Semantics): Paralleelsete järjekordade puhul võimaldab luua "barjääri", mille järel täidetakse ainult need ülesanded, mis on pärast barjääri, kuni barjäär on ületatud.
  • Dispetšeriallikaid (Dispatch Sources): Annab võimaluse reageerida süsteemi sündmustele (failioperatsioonid, signaalid, taimerid jne).
  • DispatchWorkItem: Pakub koodiploki ja seda saab saata järjekorda, tühistada ning teavitada lõpetamisest.

Näide järjestikuse järjekorra loomise ja ülesande täitmise kohta:

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

serialQueue.async {
    // Täidetakse asünkroonselt järjestikuses järjekorras
    print("Ülesanne täidetud järjestikuses järjekorras")
}

Näide dispetšerirühma kasutamisest:

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

group.enter() // Sisenemine rühma
concurrentQueue.async {
    // Ülesanne 1
    print("Ülesanne 1 lõpetatud")
    group.leave() // Lahkumine rühmast
}

group.enter() // Sisenemine rühma
concurrentQueue.async {
    // Ülesanne 2
    print("Ülesanne 2 lõpetatud")
    group.leave() // Lahkumine rühmast
}

group.notify(queue: .main) {
    // Täidetakse pärast kõigi ülesannete lõpetamist
    print("Kõik ülesanded rühmas on lõpetatud")
}

Näide DispatchWorkItem kasutamisest:

let workItem = DispatchWorkItem {
    print("WorkItem täidetud")
}

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

// workItem.cancel() // Võib tühistada enne täitmist