Middle
papasakokite apie bendrą eilę „iOS“ daugiasraigtiniame programavime.
sobes.tech AI
Atsakymas iš AI
Globalus eilė (Global Queue) Grand Central Dispatch (GCD) yra iš anksto apibrėžtos sistemos eilės, kurios yra prieinamos visoms programėlėms. Jos yra Concurrent Queues, tai yra, užduotys jose gali būti vykdomos lygiagrečiai skirtinguose srautuose.
Pagrindinės savybės:
- Tipai: Skiriasi pagal paslaugos kokybės lygį (QoS - Quality of Service).
- QoS: Nustato užduočių vykdymo prioritetą, įtakoja, kurios užduotys turi būti atliktos greičiau.
- Lygiagretumas: Leidžia vienu metu vykdyti daugybę užduočių.
- Sisteminės: Sukuriamos ir valdomos operacinės sistemos.
Globalių eilės tipai (nuo aukščiausio iki žemiausio prioriteto):
| QoS lygis | Aprašymas |
|---|---|
userInteractive |
Užduotys, tiesiogiai veikiančios naudotojo sąsają (animacijos, įvykiai). |
userInitiated |
Užduotys, kurias inicijuoja naudotojas, bet neblokuoja UI (turinio įkėlimas). |
default |
Numatytoji lygio be aiškaus QoS nurodymo. |
utility |
Užduotys, reikalaujančios vykdymo laiko, bet nėra skubios UI atžvilgiu (didelio failo įkėlimas). |
background |
Užduotys, vykdomos fone, nematomos naudotojui (duomenų sinchronizavimas). |
unspecified |
Retai naudojama, kai QoS nėra svarbus. Lygiavertė su default. |
Prieigos prie globalių eilės:
// Gauti globalią eilę su nurodytu QoS lygiu
let userInitiatedQueue = DispatchQueue.global(qos: .userInitiated)
// Gauti numatytąją globalią eilę
let defaultQueue = DispatchQueue.global()
Naudojimas globalių eilių užduotims vykdyti:
// Asinchroninis užduoties vykdymas fone
DispatchQueue.global(qos: .background).async {
// Ilgai trunkantis kodas, kuris neblokuoja UI
}
// Sinchroninis užduoties vykdymas (mažiau paplitęs globalių eilių atveju)
DispatchQueue.global(qos: .userInitiated).sync {
// Kodas, kuris turi būti įvykdytas prieš tęsiant dabartinį srautą
}
Svarbu prisiminti:
- Nerekomenduojama vykdyti užduočių, tiesiogiai veikiančių naudotojo sąsają, globaliose eilėse (išskyrus
userInteractivelabai greitoms operacijoms). UI atnaujinimus atlikite pagrindinėje eilėje (DispatchQueue.main). - Globalios eilės skirtos lygiagrečiam vykdymui. Užduočių vykdymo tvarka gali būti ne garantuota.
- Naudojant
syncglobalioje eilėje, dabartinis srautas bus užblokuotas iki užduoties pabaigos. Tai gali sukelti UI užšalimą, jei kviečiama iš pagrindinio srauto.