Middle
Ի՞նչ տեսակների հերթեր են օգտագործվում main և global-ում:
sobes.tech AI
Պատասխան AI-ից
Main queue - դա հաջորդական հերթ է (serial queue), որը աշխատում է հավելվածի գլխավոր հոսքում (main thread). Այն օգտագործվում է օգտագործողի ինտերֆեյսը թարմացնելու և UI իրադարձությունները մշակելու համար: Բոլոր tasks, որոնք ուղարկվում են main queue, կատարվում են խիստ հաջորդականությամբ:
Global queues - դա համաժամանակյա հերթեր (concurrent queues), որոնք տրամադրում է համակարգը: Դրանք օգտագործվում են ֆոնային tasks կատարելու համար, որոնք չեն կապված UI-ի հետ, ինչը թույլ է տալիս խուսափել main thread-ի բլոկավորումից: Կան մի քանի գլոբալ հերթեր տարբեր ծառայության որակի (QoS) առաջնահերթություններով:
Ահա հիմնական տեսակների աղյուսակը QoS առաջնահերթության համաձայն:
| QoS առաջնահերթություն | Նկարագրություն | Օրինակ օգտագործում |
|---|---|---|
userInteractive |
Ամենաբարձր առաջնահերթություն: Օգտագործվում է այն tasks-ի համար, որոնք պահանջում են անմիջական կատարմամբ UI-ի ինտերակտիվության համար | Անիմացիաներ, շոշափման իրադարձությունների մշակում |
userInitiated |
Բարձր առաջնահերթություն: Օգտագործվում է այն tasks-ի համար, որոնք անմիջապես սկսվում են օգտվողից և պահանջում են արագ արդյունք | Փնտրման արդյունքների ցուցադրում, բովանդակության բեռնում |
default |
Ստանդարտ առաջնահերթություն: Միջեւ userInitiated և utility |
Tasks, որոնց համար առաջնահերթությունը հստակ նշված չէ |
utility |
Միջին առաջնահերթություն: Օգտագործվում է երկարատև tasks-ի համար, որոնք կատարվում են ֆոնային ռեժիմում առաջընթացով | Ֆայլերի բեռնում, տվյալների մշակում |
background |
Նվազ առաջնահերթություն: Օգտագործվում է այն tasks-ի համար, որոնք կատարվում են ֆոնային ռեժիմում և չեն պահանջում օգտվողի ուշադրությունը | Տվյալների սինխրոնիզացիա, բակապ |
unspecified |
Առաջնահերթությունը նշված չէ: Սիստեմը որոշում է այն այլ գործոնների հիման վրա | Կեսօր seldom օգտագործվում |
Օրինակ՝ task ուղարկելու համար main և global queues:
DispatchQueue.main.async {
// UI թարմացման կոդ
}
DispatchQueue.global(qos: .userInitiated).async {
// Ֆոնային task-ի կատարման կոդ բարձր առաջնահերթությամբ
// Կատարման ավարտից հետո հնարավոր է վերադառնալ main queue՝ UI թարմացման համար
DispatchQueue.main.async {
// UI թարմացում ֆոնային task-ի ավարտից հետո
}
}