Sobes.tech
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-ի ավարտից հետո
    }
}