Sobes.tech
Junior — Middle

Tizimda turli navbatlar o'rtasida o'zaro ta'sir va aloqa qanday amalga oshirilishi mumkin?

sobes.tech AI

AIdan javob

iOSда, турли навбатлар (масалан, асосий ва фон навбатлар) ўртасидаги ўзаро алоқа учун GCD (Grand Central Dispatch) кўпинча қўлланилади. Навбатлар орасидаги асосий алоқа усуллари:

  • Dispatch гуруҳлари — бир нечта асинхрон вазифаларни бирлаштириш ва уларнинг барчаси якунлангандан кейин хабар бериш имконини беради. Бу турли навбатларнинг ишини синхронлаштириш учун қулай.

  • Dispatch семафорлари — бир вақтда бажарилаётган вазифалар сонини чеклаш ва тўғри ўтказишларини синхронлаштириш учун қўлланилади.

  • Dispatch барьерлари — рақобатчи навбатда барьер ўрнатишга imkon беради, шу билан бирга, муайян код блокининг бажарилишини кафолатлайди, бошқа вазифалар бир вақтда бажарилмайди.

  • Навбатлар орасида маълумотлар ўтказиш — масалан, фон вазифасини бажаргандан кейин DispatchQueue.main.async чақириш орқали UI янгилаш мумкин.

Dispatch Groupдан фойдаланиш намунаси:

let group = DispatchGroup()

let queue1 = DispatchQueue(label: "com.example.queue1")
let queue2 = DispatchQueue(label: "com.example.queue2")

queue1.async(group: group) {
    // вазифа 1
    print("Вазифа 1 бажарилди")
}

queue2.async(group: group) {
    // вазифа 2
    print("Вазифа 2 бажарилди")
}

group.notify(queue: DispatchQueue.main) {
    print("Барча вазифалар якунланди")
}

Шу тарзда, Dispatch Group бир неча навбатни бирлаштиришга ва барча вазифалар якунлангандан кейин хабар беришга ёрдам беради.