Ποιοι είναι οι τύποι ουρών που χρησιμοποιούνται στο main και στο global;
sobes.tech AI
Απάντηση από AI
Η κύρια ουρά (Main queue) είναι μια σειριακή ουρά (serial queue) που λειτουργεί στο κύριο νήμα (main thread) της εφαρμογής. Χρησιμοποιείται για την ενημέρωση του περιβάλλοντος χρήστη και την επεξεργασία γεγονότων UI. Όλες οι εργασίες που αποστέλλονται στην κύρια ουρά εκτελούνται αυστηρά σειριακά.
Οι παγκόσμιες ουρές (Global queues) είναι παράλληλες ουρές (concurrent queues) που παρέχονται από το σύστημα. Χρησιμοποιούνται για την εκτέλεση εργασιών φόντου, που δεν σχετίζονται με το UI, αποφεύγοντας το μπλοκάρισμα του κύριου νήματος. Υπάρχουν διάφορες παγκόσμιες ουρές με διαφορετικές προτεραιότητες ποιότητας υπηρεσίας (Quality of Service, QoS).
Ακολουθεί ένας πίνακας με τους κύριους τύπους παγκόσμιων ουρών ανά προτεραιότητα QoS:
| Προτεραιότητα QoS | Περιγραφή | Παράδειγμα χρήσης |
|---|---|---|
userInteractive |
Η υψηλότερη προτεραιότητα. Χρησιμοποιείται για εργασίες που απαιτούν άμεση εκτέλεση για διαδραστικότητα UI. | Κινήσεις, επεξεργασία γεγονότων αφής. |
userInitiated |
Υψηλή προτεραιότητα. Χρησιμοποιείται για εργασίες που ξεκινούν άμεσα από τον χρήστη και απαιτούν γρήγορα αποτελέσματα. | Εμφάνιση αποτελεσμάτων αναζήτησης, φόρτωση περιεχομένου για εμφάνιση. |
default |
Προεπιλεγμένη προτεραιότητα. Μεταξύ userInitiated και utility. |
Εργασίες για τις οποίες δεν έχει οριστεί ρητά προτεραιότητα. |
utility |
Μεσαία προτεραιότητα. Χρησιμοποιείται για μακροχρόνιες εργασίες που εκτελούνται στο παρασκήνιο με πρόοδο. | Φόρτωση αρχείων, επεξεργασία δεδομένων. |
background |
Χαμηλή προτεραιότητα. Χρησιμοποιείται για εργασίες στο παρασκήνιο που δεν απαιτούν την προσοχή του χρήστη. | Συγχρονισμός δεδομένων, δημιουργία αντιγράφων ασφαλείας. |
unspecified |
Μη καθορισμένη προτεραιότητα. Το σύστημα την καθορίζει βάσει άλλων παραγόντων. | Σπάνια χρησιμοποιείται. |
Παράδειγμα αποστολής εργασίας στην κύρια και την παγκόσμια ουρά:
DispatchQueue.main.async {
// Κώδικας για ενημέρωση UI
}
DispatchQueue.global(qos: .userInitiated).async {
// Κώδικας για εκτέλεση εργασίας φόντου με υψηλή προτεραιότητα
// Μετά την ολοκλήρωση, ίσως χρειαστεί να επιστρέψετε στην κύρια ουρά για ενημέρωση UI
DispatchQueue.main.async {
// Ενημέρωση UI μετά την ολοκλήρωση της εργασίας φόντου
}
}