Sobes.tech
Middle

Kokie yra eilės tipai, naudojami main ir global?

sobes.tech AI

Atsakymas iš AI

Pagrindinė eilė - tai eilė (serial queue), kuri veikia pagrindiniame sraute (main thread) programos. Ji naudojama vartotojo sąsajos atnaujinimui ir UI įvykių apdorojimui. Visi uždaviniai, siunčiami į pagrindinę eilę, vykdomi griežtai seka.

Globalios eilės - tai paralelios eilės (concurrent queues), kurias teikia sistema. Jos naudojamos foniniams uždaviniams, nesusijusiems su UI, kas leidžia išvengti pagrindinio srauto užblokavimo. Yra keletas globalių eilių su skirtingais paslaugos kokybės (QoS) prioritetais.

Štai lentelė su pagrindiniais globalių eilių tipais pagal QoS prioritetą:

QoS Prioritetas Aprašymas Pavyzdys naudojimo
userInteractive Aukščiausias prioritetas. Naudojamas užduotims, kurioms reikalingas nedelstas vykdymas UI interaktyvumui Animacijos, lietimo įvykių apdorojimas
userInitiated Aukštas prioritetas. Naudojamas užduotims, kurios tiesiogiai inicijuojamos vartotojo ir reikalauja greito rezultato Paieškos rezultatų rodymas, turinio įkėlimas
default Standartinis prioritetas. Tarp userInitiated ir utility Užduotys, kurioms aiškiai nenurodyta prioritetas
utility Vidutinis prioritetas. Naudojamas ilgalaikiams uždaviniams, vykdomiems foniniame režime su progresu Failų įkėlimas, duomenų apdorojimas
background Žemas prioritetas. Naudojamas foniniams uždaviniams, kurie nereikalauja vartotojo dėmesio Duomenų sinchronizavimas, atsarginės kopijos kūrimas
unspecified Prioritetas nenurodytas. Sistema nustato jį remiantis kitais veiksniais Retai naudojama

Pavyzdys, kaip siųsti užduotį į pagrindinę ir globalią eilę:

DispatchQueue.main.async {
    // UI atnaujinimo kodas
}

DispatchQueue.global(qos: .userInitiated).async {
    // Foninės užduoties vykdymo kodas su aukštu prioritetu
    // Po vykdymo gali būti reikalinga grįžti į main queue UI atnaujinimui
    DispatchQueue.main.async {
        // UI atnaujinimas po foninės užduoties pabaigos
    }
}