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)։