Middle
Ի՞նչ է Grand Central Dispatch-ը և ինչպես է այն օգտագործվում iOS զարգացման մեջ։
sobes.tech AI
Պատասխան AI-ից
Grand Central Dispatch (GCD) — ցածր մակարդակի API՝ բազմատողային կառավարման համար, որը ապահովում է համակարգային թելերի պուլ և պլանավորում է դրանց վրա առաջադրանքների կատարմանը:
GCD-ի հիմնական գաղափարները՝
- Dispatch Queues: Քաշեր, որոնց մեջ տեղադրվում են կոդի բլոկներ (գործառույթներ) կատարման համար:
- Serial Queues: Կատարում են բլոկները հերթականությամբ՝ մեկից հետո մեկ:
- Concurrent Queues: Կատարում են բլոկները միաժամանակ, բայց ըստ ավելացման կարգի:
- Tasks (Blocks): Աշխատանքային միավորներ, որոնք ուղարկվում են Dispatch Queues:
- Dispatch Sources: Սիստեմային իրադարձությունների մոնիտորինգ՝ ֆայլեր, socket-ներ, նշաններ, որոնք հրավիրում են բլոկների կատարմանը դրանց առաջացման ժամանակ:
Օգտագործում՝
-
Ֆոնային գործողությունների կատարման: Դատան տվյալների բեռնում ցանցից, պատկերների մշակում, բարդ հաշվարկներ՝ առանց գլխավոր թելին (UI) խանգարելու:
DispatchQueue.global(qos: .userInitiated).async { // Ծանրաբեռնված գործողության կատարում let processedData = performHeavyProcessing() DispatchQueue.main.async { // UI-ի թարմացում գլխավոր թելին updateUI(with: processedData) } } -
Գործառույթների պլանավորում: Ուղարկում հետաձգված կամ պարբերական կատարման:
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) { // Այս կոդը կիրականացվի 2 վայրկյան հետո print("Հետաձգված կատարում") } -
Տվյալների մուտքի սինխրոնիզացիա: Սերիական հերթերի կամ
DispatchQueue.concurrentPerformօգտագործում՝ միաժամանակյա մուտքի վերահսկման համար:let syncQueue = DispatchQueue(label: "com.myapp.syncdatasource", attributes: .concurrent) var sharedArray = [Int]() func addItem(_ item: Int) { syncQueue.async(flags: .barrier) { // .barrier օգտագործում՝ բացառիկ մուտքագրում գրելու ժամանակ sharedArray.append(item) } } func processItems() { syncQueue.sync { // սինխրոն ընթերցում for item in sharedArray { print(item) } } }
Առավելություններ՝ POSIX թելերի (մատչելի թելերի) նկատմամբ՝
- Հեշտ օգտագործում: Բարձր մակարդակի աբստրակցիա:
- Արդյունավետություն: GCD-ը ավելի արդյունավետ է կառավարում համակարգային թելերի պուլը՝ նվազեցնելով ծախսերը:
- Մասշտաբայնություն: Ավտոմատ կերպով հարմարեցվում է պրոցեսորի միջուկների քանակին:
QoS տեսակներ (Որակյալ ծառայություն): Կարգավորում է GCD-ի պլանավորողի առաջադրանքի առաջնահերթությունը:
| QoS | Օգտագործում |
|---|---|
| userInteractive | UI-ի թարմացումներ, անիմացիաներ, արագ արձագանք |
| userInitiated | Օգտագործողի կողմից սկսված առաջադրանքներ, որոնք պահանջում են արագ ավարտում (բեռնում, լուսանկարների մշակում) |
| default | Դյուրակիր առաջնահերթություն, միջեւ userInitiated և utility |
| utility | Երկարատև առաջադրանքներ՝ առանց շտապության (բեռնում, ինդեքսավորում) |
| background | Պատկերացումներ՝ ֆոնային առաջադրանքներ, որոնք չեն տեսանելի օգտատիրոջը (գրառումներ, սինխրոնիզացիա ֆոնում) |
| unspecified | Առաջադրանքի առաջնահերթությունը չի սահմանվել, որոշվում է համակարգի կողմից |