Sobes.tech
Junior

ԻՕՍ-ի զարգացման համատեքստում GCD (Grand Central Dispatch) ինչ է?

sobes.tech AI

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

GCD (Grand Central Dispatch)-ը Apple-ի ցածր մակարդակի API-ն է, որը նախատեսված է հոսքերի կառավարման և կոդի ասինխրոն կատարման համար հավելվածներում: Այն տրամադրում է մեխանիզմ՝ հանձնարարականներ ուղարկելու կատարման հերթեր, որոնք համակարգը կառավարում է:

Հիմնական առանձնահատկությունները՝

  • Կատարման հերթեր (Dispatch Queues): FIFO կառուցվածքներ, որոնց մեջ ավելացվում են կոդի բլոկներ (closures) կատարման համար:
    • Դրանք ելնում են concurrent (համաժամանակյա) և serial (հետևական) տեսակներից:
    • Գլոբալ համակարգային հերթեր և օգտագործողի կողմից ստեղծվող:
  • Բլոկներ (Blocks): Աշխատանքային միավորներ, որոնք ուղարկվում են հերթեր:
  • Հոսքերի կառավարում: Թաքցնում է ծրագրավորողից հոսքերի անմիջական կառավարումը, թույլ տալով համակարգին օպտիմալ կերպով բաժանել առաջադրանքները հասանելի պրոցեսորային միջուկների վրա:
  • Առաջնահերթություններ: Հնարավորություն է տալիս նշել առաջադրանքի առաջնահերթությունը համակարգային գլոբալ concurrent հերթերում:

Տիպեր հերթեր՝

  • Serial (հետևական): Կատարվում են միայն մեկ առաջադրանք՝ ըստ ավելացման հերթականության: Վստահեցնում է, որ միայն մեկ առաջադրանք է կատարվում այդ հերթում ցանկացած ժամանակ:
    • Հիմնական հերթ (DispatchQueue.main) — հատուկ serial հերթ UI թարմացումների համար:
    • Օգտագործողի ստեղծած serial հերթեր:
  • Concurrent (համաժամանակյա): Կարող են միաժամանակ կատարել մի քանի առաջադրանք, ավարտման հերթականությունը չի երաշխավորվում:
    • Սիստեմի գլոբալ concurrent հերթեր՝ տարբեր QoS մակարդակներով:
    • Օգտագործողի ստեղծած concurrent հերթեր:

QoS մակարդակներ՝

QoS մակարդակ Նկարագրություն Օգտագործման օրինակներ
userInteractive Աշխատանքներ, որոնց հետ ակտիվորեն շփվում է օգտատերը Անիմացիաներ, UI իրադարձությունների մշակումը
userInitiated Օշխատանքներ, որոնք սկսվում են օգտատիրոջ կողմից և պահանջում են անմիջական արդյունք Դատարկման բովանդակության բեռնում սեղմումով
utility Երկարատև աշխատանքներ, որոնք չեն պահանջում անմիջական արդյունք Տվյալների բեռնում, պատկերների մշակում ֆոնային ռեժիմում
background Աշխատանքներ, որոնք կատարվում են ֆոնային ռեժիմում, անտեսանելի օգտատիրոջ համար Կեշի թարմացում, տվյալների սինխրոնիզացիա
unspecified QoS մակարդակը նշված չէ, համակարգը որոշում է ինքնուրույն Հին API կամ ցածր մակարդակի համակարգային առաջադրանքներ

Օրինակ՝

// Կատարման հանձնարարական ֆոնային հոսքում (գլոբալ concurrent հերթ)
DispatchQueue.global(qos: .userInitiated).async {
    // Երկարատև գործողության կատարմամբ
    print("Ֆոնային առաջադրանքի կատարմամբ")

    // Վերադառնալ հիմնական հոսք՝ UI թարմացման համար
    DispatchQueue.main.async {
        print("UI թարմացում հիմնական հոսքում")
    }
}

GCD-ը հեշտացնում է բազմահոսքային և համաժամանակյա աշխատանքը, դարձնելով կոդը ավելի ընթեռնելի և քիչ ենթակա սխալների՝ race conditions, ի տարբերություն ցածր մակարդակի հոսքերի կառավարման (օրինակ՝ Thread