Sobes.tech
Middle

Welche Arten von Warteschlangen werden in main und global verwendet?

sobes.tech KI

Antwort von AI

Die Hauptwarteschlange (Main queue) ist eine serielle Warteschlange (serial queue), die im Hauptthread (main thread) der Anwendung läuft. Sie wird verwendet, um die Benutzeroberfläche zu aktualisieren und UI-Ereignisse zu verarbeiten. Alle an die Hauptwarteschlange gesendeten Aufgaben werden strikt sequenziell ausgeführt.

Globale Warteschlangen (Global queues) sind parallele Warteschlangen (concurrent queues), die vom System bereitgestellt werden. Sie werden für Hintergrundaufgaben verwendet, die nicht mit der UI verbunden sind, um eine Blockierung des Hauptthreads zu vermeiden. Es gibt mehrere globale Warteschlangen mit unterschiedlichen Prioritäten des Service-Qualitätsniveaus (Quality of Service, QoS).

Hier ist eine Tabelle mit den wichtigsten Typen globaler Warteschlangen nach QoS-Priorität:

QoS-Priorität Beschreibung Beispiel für die Verwendung
userInteractive Höchste Priorität. Wird für Aufgaben verwendet, die sofortige Ausführung für die UI-Interaktivität erfordern. Animationen, Touch-Event-Verarbeitung.
userInitiated Hohe Priorität. Wird für Aufgaben verwendet, die direkt vom Benutzer initiiert werden und schnelle Ergebnisse erfordern. Anzeige von Suchergebnissen, Laden von Inhalten für die Anzeige.
default Standardpriorität. Zwischen userInitiated und utility. Aufgaben, bei denen keine Priorität explizit angegeben ist.
utility Mittlere Priorität. Wird für längere Aufgaben verwendet, die im Hintergrund mit Fortschritt ausgeführt werden. Dateiladen, Datenverarbeitung.
background Niedrige Priorität. Wird für Aufgaben im Hintergrund verwendet, die keine Benutzerinteraktion erfordern. Daten-Synchronisierung, Backup.
unspecified Nicht spezifizierte Priorität. Das System legt sie anhand anderer Faktoren fest. Wird selten verwendet.

Beispiel für das Senden einer Aufgabe an die Haupt- und die globale Warteschlange:

DispatchQueue.main.async {
    // Code zur Aktualisierung der UI
}

DispatchQueue.global(qos: .userInitiated).async {
    // Code zur Ausführung einer Hintergrundaufgabe mit hoher Priorität
    // Nach Abschluss kann es notwendig sein, zur Hauptwarteschlange zurückzukehren, um die UI zu aktualisieren
    DispatchQueue.main.async {
        // UI-Aktualisierung nach Abschluss der Hintergrundaufgabe
    }
}