Middle
Welche Arten von Warteschlangen gibt es in Grand Central Dispatch (GCD)?
sobes.tech KI
Antwort von AI
In GCD werden vier Haupttypen von Warteschlangen verwendet:
-
Hauptwarteschlange (Main Queue):
- Serielle Warteschlange.
- Wird verwendet, um Aufgaben im Hauptthread der Anwendung auszuführen (UI-Aktualisierungen, Ereignisbehandlung).
- Es gibt immer eine pro Anwendung.
-
Globale konkurrierende Warteschlangen (Global Concurrent Queues):
- Konkurrierende Warteschlangen.
- Vom System bereitgestellt.
- Haben verschiedene Prioritätsstufen des Service-Qualitätsniveaus (Quality of Service - QoS).
- Können mehrere Aufgaben gleichzeitig ausführen.
-
Benutzerdefinierte serielle Warteschlangen (Custom Serial Queues):
- Vom Entwickler erstellte serielle Warteschlangen.
- Führen Aufgaben sequenziell aus, eine nach der anderen.
- Ideal zur Steuerung des Zugriffs auf Ressourcen (Synchronisation).
-
Benutzerdefinierte konkurrierende Warteschlangen (Custom Concurrent Queues):
- Vom Entwickler erstellte konkurrierende Warteschlangen.
- Können mehrere Aufgaben gleichzeitig ausführen.
- Ermöglichen eine bessere Kontrolle der Ausführung von Aufgaben im Vergleich zu globalen konkurrierenden Warteschlangen.
Beispiele für die Erstellung von Warteschlangen:
// Hauptwarteschlange
let mainQueue = DispatchQueue.main
// Eine der globalen konkurrierenden Warteschlangen (mit hoher Priorität)
let globalHighPriorityQueue = DispatchQueue.global(qos: .userInitiated)
// Benutzerdefinierte serielle Warteschlange
let customSerialQueue = DispatchQueue(label: "com.myapp.serialqueue")
// Benutzerdefinierte konkurrierende Warteschlange
let customConcurrentQueue = DispatchQueue(label: "com.myapp.concurrentqueue", attributes: .concurrent)
QoS-Prioritäten für globale Warteschlangen:
| QoS-Priorität | Beschreibung |
|---|---|
.userInteractive |
Aufgaben im Zusammenhang mit der Benutzeroberfläche (Reaktion auf Klicks). |
.userInitiated |
Vom Benutzer initiierte Aufgaben (Laden von Inhalten auf Anfrage). |
.default |
Standardpriorität, zwischen .userInitiated und .utility. |
.utility |
Lange Hintergrundaufgaben (Datei-Downloads). |
.background |
Aufgaben mit niedriger Priorität, unabhängig vom Benutzer. |
.unspecified |
Das System bestimmt die Priorität. |