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
}
}