Sobes.tech
Middle

պատմեք iOS-ում բազմատող ծրագրավորման գլոբալ հերթի մասին։

sobes.tech AI

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

Գլոբալ հերթ (Global Queue)՝ Grand Central Dispatch (GCD)-ում՝ դա նախանշված համակարգային հերթեր են, որոնք հասանելի են բոլոր հավելվածների համար: Դրանք համատեղ հերթեր են, այսինքն՝ դրանցում առաջադրանքները կարող են կատարվել միաժամանակ տարբեր հոսքերում:

Հիմնական հատկանիշներ՝

  • Տիպեր: Տարբերում են սպասարկման որակի մակարդակով (QoS - Quality of Service):
  • QoS: Կարգավորում է առաջադրանքների կատարման առաջնահերթությունը, ազդում է այն վրա, թե որ առաջադրանքները պետք է կատարվեն արագ:
  • Համաժամանակություն: Позволяет выполнять множество задач одновременно.
  • Համակարգային: Ստեղծվում և կառավարվում է օպերացիոն համակարգի կողմից:

Տարբեր տեսակների գլոբալ հերթեր (առաջնահերթության նվազման կարգով):

QoS մակարդակ Նկարագրություն
userInteractive Առաջադրանքներ, որոնք անմիջապես ազդում են օգտվողի ինտերֆեյսի վրա (անիմացիաներ, իրադարձություններ):
userInitiated Առաջադրանքներ, որոնք սկսում է օգտվողը, բայց չեն խոչընդոտում UI-ին (միայն բովանդակության բեռնում):
default Անհատական մակարդակ առանց QoS հստակեցնելու:
utility Առաջադրանքներ, որոնք պահանջում են կատարման ժամանակ, բայց չեն անհապաղ անհրաժեշտ UI-ին (մեծ ֆայլերի բեռնում):
background Առաջադրանքներ, որոնք կատարվում են ֆոնային ռեժիմում, չեն տեսանելի օգտվողին (մասնակցություն տվյալների սինխրոնիզացիային):
unspecified Կիրառվում է հազվադեպ, երբ QoS-ը կարևոր չէ: Թվայնորեն համարժեք է default-ին:

Աջակցություն գլոբալ հերթերին:

// Գլոբալ հերթ ստանալ նշված QoS մակարդակով
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)

// Դեպի ստանդարտ գլոբալ հերթ
let defaultQueue = DispatchQueue.global()

Գլոբալ հերթերի օգտագործում առաջադրանքների կատարման համար:

// Ասինխրոն կատարման օրինակ ֆոնային հերթում
DispatchQueue.global(qos: .background).async {
    // Լայնածավալ կոդ, որը չի խոչընդոտում UI-ին
}

// Սինխրոն կատարման օրինակ (քիչ օգտագործվում է գլոբալ հերթերի դեպքում)
DispatchQueue.global(qos: .userInitiated).sync {
    // Կոդ, որը պետք է կատարվի առաջ, քան ընթացիկ հոսքը շարունակվի
}

Կարևոր է հիշել՝

  • Չպետք է կատարել այն առաջադրանքները, որոնք անմիջապես ազդում են UI-ի վրա, գլոբալ հերթերում (բացառությամբ userInteractive-ի՝ շատ արագ գործողությունների համար): UI-ի թարմացումները կատարեք հիմնական հերթում (DispatchQueue.main).
  • Գլոբալ հերթերը նախատեսված են միաժամանակյա կատարման համար: Արդյունքների հերթականությունը չի երաշխավորվում:
  • sync-ի օգտագործման դեպքում ընթացիկ հոսքը կլոկավորվի մինչև առաջադրանքի ավարտը, ինչը կարող է հանգեցնել UI-ի բլոկավորման, եթե կանչվում է հիմնական հոսքից։