Middle
Jakie typy kolejek są używane w main i global?
sobes.tech AI
Odpowiedź od AI
Główna kolejka (Main queue) to kolejka seryjna (serial queue), działająca w głównym wątku (main thread) aplikacji. Służy do aktualizacji interfejsu użytkownika i obsługi zdarzeń UI. Wszystkie zadania wysłane do głównej kolejki są wykonywane ściśle kolejno.
Kolejki globalne (Global queues) to równoległe kolejki (concurrent queues) dostarczane przez system. Używa się ich do wykonywania zadań w tle, niezwiązanych z UI, co zapobiega blokowaniu głównego wątku. Istnieje kilka globalnych kolejek o różnych priorytetach jakości obsługi (Quality of Service, QoS).
Oto tabela głównych typów kolejek globalnych według priorytetu QoS:
| Priorytet QoS | Opis | Przykład użycia |
|---|---|---|
userInteractive |
Najwyższy priorytet. Używany dla zadań wymagających natychmiastowego wykonania dla interaktywności UI. | Animacje, obsługa zdarzeń dotykowych. |
userInitiated |
Wysoki priorytet. Używany dla zadań bezpośrednio inicjowanych przez użytkownika i wymagających szybkiego rezultatu. | Wyświetlanie wyników wyszukiwania, ładowanie treści do wyświetlenia. |
default |
Priorytet domyślny. Między userInitiated a utility. |
Zadania, dla których priorytet nie jest wyraźnie określony. |
utility |
Średni priorytet. Używany dla długotrwałych zadań wykonywanych w tle z postępem. | Ładowanie plików, przetwarzanie danych. |
background |
Niski priorytet. Używany dla zadań wykonywanych w tle, nie wymagających uwagi użytkownika. | Synchronizacja danych, tworzenie kopii zapasowych. |
unspecified |
Priorytet nieokreślony. System ustala go na podstawie innych czynników. | Rzadko używany. |
Przykład wysyłania zadania do głównej i globalnej kolejki:
DispatchQueue.main.async {
// Kod do aktualizacji UI
}
DispatchQueue.global(qos: .userInitiated).async {
// Kod do wykonania zadania w tle o wysokim priorytecie
// Po wykonaniu, może być konieczne powrócenie do głównej kolejki w celu aktualizacji UI
DispatchQueue.main.async {
// Aktualizacja UI po zakończeniu zadania w tle
}
}