Millised on järjekordade tüübid, mida kasutatakse main ja global?
sobes.tech AI
Vastus AI-lt
Peamine järjekord - see on järjestusjärjekord (serial queue), mis töötab rakenduse peamisel lõngal (main thread). Seda kasutatakse kasutajaliidese uuendamiseks ja UI sündmuste töötlemiseks. Kõik ülesanded, mis saadetakse peamisele järjekorrale, täidetakse rangelt järjestatult.
Globaalne järjekord - need on paralleelsed järjekorrad (concurrent queues), mida süsteem pakub. Neid kasutatakse taustatöödeks, mis ei ole seotud UI-ga, võimaldades vältida peamise lõnga blokeerimist. On olemas mitu globaalset järjekorda erinevate teenindusstandardite (Quality of Service, QoS) prioriteetidega.
Siin on tabel peamiste globaalsete järjekordade tüüpide kohta QoS prioriteedi järgi:
| QoS Prioriteet | Kirjeldus | Kasutamise näide |
|---|---|---|
userInteractive |
Kõrgeim prioriteet. Kasutatakse ülesannete jaoks, mis nõuavad viivitamatut täitmist UI interaktiivsuse jaoks | Animatsioonid, puutetundlike sündmuste töötlemine |
userInitiated |
Kõrge prioriteet. Kasutatakse kasutajalt otseselt algatatud ülesannete jaoks, mis nõuavad kiiret tulemust | Otsingutulemuste kuvamine, sisu laadimine |
default |
Vaikimisi prioriteet. Vahel userInitiated ja utility vahel |
Ülesanded, mille prioriteet ei ole selgelt määratletud |
utility |
Keskmine prioriteet. Kasutatakse pikaajaliste ülesannete jaoks, mis töötavad taustal edusammudega | Failide laadimine, andmetöötlus |
background |
Madal prioriteet. Kasutatakse taustatöödeks, mis ei nõua kasutaja tähelepanu | Andmete sünkroniseerimine, varundamine |
unspecified |
Prioriteet ei ole määratletud. Süsteem määrab selle teiste tegurite põhjal | Harva kasutatakse |
Näide ülesande saatmisest peamise ja globaalsete järjekordade vahel:
DispatchQueue.main.async {
// UI uuendamise kood
}
DispatchQueue.global(qos: .userInitiated).async {
// Taustatööde täitmise kood kõrge prioriteediga
// Pärast täitmist võib olla vajalik naasta main queue'le UI uuendamiseks
DispatchQueue.main.async {
// UI uuendamine pärast taustatöö lõpetamist
}
}