Ich habe die parallele Programmierung mit GCD untersucht.
macOS 10.15.7 Xcode 12.1 Swift 5.3
Jede iOS-Anwendung hat einen Haupt-Thread. Der Hauptthread zeigt die Benutzeroberfläche an und wartet auf auftretende Ereignisse. Komplizierte Berechnungen im Hauptthread können Ihre App verlangsamen und einfrieren. Multithreading ist in solchen Fällen nützlich. Es ist ein Mechanismus, der eine Aufgabe mit hoher Last in einen Hintergrundthread verschiebt und nach Abschluss der Aufgabe zum Hauptthread zurückkehrt.
Eine Reihe von Codeblöcken, die darauf warten, von einem Thread entweder parallel oder in Reihe ausgeführt zu werden. Mit Swift müssen Sie nur die Warteschlange verwalten und müssen sich überhaupt nicht des Threads bewusst sein. Das System ist für die Bereitstellung und Zuweisung der ** Threads verantwortlich, die zum Ausführen des Codes in der Warteschlange erforderlich sind. ** ** **
Grand Central Dispatch: GCD API, die für die Verwaltung von Warteschlangen verantwortlich ist.
--Erstellen Sie eine Warteschlange
Das wichtigste Stichwort von allen. ** Jeder Codeblock, der sich auf die Benutzeroberfläche auswirkt, muss in der Hauptwarteschlange ausgeführt werden **.
Wird verwendet, um andere Aufgaben als langlebige UI-Aufgaben in die Warteschlange zu stellen. Läuft häufig parallel zur Hauptwarteschlange der Benutzeroberfläche.
.userInteractive
Benutzerinteraktive Aufgaben sind die Aufgaben mit der höchsten Priorität im System. Verwenden Sie diese Ebene für Aufgaben und Warteschlangen, die mit Benutzern interagieren und die Benutzeroberfläche der App aktiv aktualisieren. Verwenden Sie es beispielsweise für Animationen oder Klassen, die Ereignisse interaktiv verfolgen.
.userInitiated
Benutzerinitiativaufgaben sind in Bezug auf die Systempriorität nach interaktiven Benutzeraufgaben an zweiter Stelle. Weisen Sie diese Klasse Aufgaben zu, die sofortige Ergebnisse liefern, während der Benutzer etwas tut, oder Aufgaben, die den Benutzer daran hindern, die App zu verwenden. Mit dieser Dienstgütestufe können Sie beispielsweise den Inhalt der E-Mail laden, die Sie Ihren Benutzern anzeigen möchten.
.utility
Dienstprogrammaufgaben haben eine niedrigere Priorität als vom Benutzer initiierte Aufgaben und Benutzerinteraktionsebenen, jedoch eine höhere Priorität als Hintergrundaufgaben. Weisen Sie diese Qualitätsklasse Aufgaben zu, die Benutzer nicht daran hindern, die App weiterhin zu verwenden. Sie können diese Klasse beispielsweise langfristigen Aufgaben zuweisen, bei denen Benutzer ihren Fortschritt nicht aktiv verfolgen.
.background
Hintergrundaufgaben haben die niedrigste Priorität aller Aufgaben. Weisen Sie diese Ebene der Aufgabe oder Versandwarteschlange zu, mit der die Arbeit ausgeführt wird, während die App im Hintergrund ausgeführt wird. Zum Beispiel Wartungsaufgaben oder Aufräumarbeiten.
.default
Priorität ist eine Ebene zwischen vom Benutzer initiierten Aufgaben und Dienstprogrammen.
Wenn das Aufgabenelement synchron von der Methode "sync" ausgeführt wird, wartet das Programm auf den Abschluss der Ausführung, bevor die Methode aufgerufen wird.
python
DispatchQueue.main.sync {
// Code to be executed
}
Dieser Code kann als "Versenden einer synchronen Warteschlange an den Hauptthread" verstanden werden.
Wenn ein Aufgabenelement von der asynchronen Methode asynchron ausgeführt wird, wird die Methode sofort aufgerufen.
python
DispatchQueue.global().async {
// Code to be executed
}
Dieser Code kann als "Versenden einer asynchronen Warteschlange an einen Hintergrundthread" verstanden werden.
Recommended Posts