Sobes.tech
Middle

Ի՞նչ գործիքներ են հասանելի Grand Central Dispatch (GCD)-ում։

sobes.tech AI

Պատասխան AI-ից

GCD-ի հիմնական գործիքները:

  • Դիսպետչերային հերթեր (Dispatch Queues): Կառավարում են կոդի բլոկների կատարմանը: Կարող են լինել՝
    • Սերիական (Serial): Կատարում են առաջադրանքները մեկի հետևից, ապահովելով կարգը:
    • Պարալել (Concurrent): Կատարում են առաջադրանքները միաժամանակ (համապատասխան համակարգային ռեսուրսների սահմաններում):
  • Գլոբալ պարալել հերթեր (Global Concurrent Queues): Սիստեմի կողմից տրամադրված, ունեն նախանշված առաջնահերթություններ (QoS):
  • Հիմնական հերթ (Main Queue): Հատուկ սերիական հերթ, կապված ծրագրի գլխավոր հոսքի հետ: Օգտագործվում է UI-ի հետ աշխատելու համար:
  • Դիսպետչերային խմբեր (Dispatch Groups): Позволяют отслеживать завершение набора асинхронных задач.
  • Բարьерային սեմանտիկա (Barrier Semantics): Պարալել հերթերի համար, թույլ է տալիս ստեղծել "բարьер", որի հետո կատարվում են միայն այն առաջադրանքները, որոնք դրանից հետո են, մինչ բարերընը չանցնի:
  • Դիսպետչերային աղբյուրներ (Dispatch Sources): Позволяют реагировать на системные события (файловые операции, сигналы, таймеры и т.д.).
  • DispatchWorkItem: Կոդի բլոկը պատում է և կարող է ուղարկվել հերթ, չեղարկվել և տեղեկացվել ավարտի մասին:

Նմուշ՝ սերիական հերթ ստեղծելու և առաջադրանք կատարելու:

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

serialQueue.async {
    // Ասինխրոն կատարմամբ սերիական հերթում
    print("Առաջադրանքը կատարվել է սերիական հերթում")
}

Նմուշ՝ դիսպետչերային խմբի օգտագործման:

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

group.enter() // Մուտք խմբի
concurrentQueue.async {
    // Առաջադրանք 1
    print("Առաջադրանք 1 ավարտված")
    group.leave() // Ելք խմբից
}

group.enter() // Մուտք խմբի
concurrentQueue.async {
    // Առաջադրանք 2
    print("Առաջադրանք 2 ավարտված")
    group.leave() // Ելք խմբից
}

group.notify(queue: .main) {
    // Կատարվում է բոլոր առաջադրանքների ավարտից հետո
    print("Բոլոր առաջադրանքները խմբում ավարտված")
}

Նմուշ՝ DispatchWorkItem օգտագործելու:

let workItem = DispatchWorkItem {
    print("WorkItem կատարված")
}

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

// workItem.cancel() // Կարող է չեղարկել մինչև կատարման ժամանակը