[GCD] Grundlagen der parallelen Programmierung in Swift

Was ist dieser Artikel?

Ich habe die parallele Programmierung mit GCD untersucht.

Umgebung

macOS 10.15.7 Xcode 12.1 Swift 5.3

der Begriff

Faden

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.

Warteschlange

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.

Die Rolle der GCD

--Erstellen Sie eine Warteschlange

Hauptwarteschlange

Das wichtigste Stichwort von allen. ** Jeder Codeblock, der sich auf die Benutzeroberfläche auswirkt, muss in der Hauptwarteschlange ausgeführt werden **.

Hintergrundwarteschlange

Wird verwendet, um andere Aufgaben als langlebige UI-Aufgaben in die Warteschlange zu stellen. Läuft häufig parallel zur Hauptwarteschlange der Benutzeroberfläche.

Prioritätsstufe der Hintergrundwarteschlange

Benutzer interaktiv

.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.

Benutzerinitiative

.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.

Nützlichkeit

.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.

Hintergrund

.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.

Standard

.default Priorität ist eine Ebene zwischen vom Benutzer initiierten Aufgaben und Dienstprogrammen.

Code zur Warteschlange hinzufügen

Synchron hinzufügen

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.

Asynchron hinzufügen

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

[GCD] Grundlagen der parallelen Programmierung in Swift
[GCD] Grundlagen der DispatchQueue-Klasse
Finden Sie mit Swift eine Annäherung an cosx
Die Geschichte des Lernens von Java in der ersten Programmierung
Grundlagen der Java-Programmierung
Implementierungsnotiz für SKStoreReviewController in der Swift-Benutzeroberfläche von iOS14
Grundlagen von Ruby
Reihenfolge der in Swift verwendeten Modifikatoren (siehe SwiftLint)
So führen Sie Aufgaben parallel zu Swift in Swift Package aus
Über das Problem des Deadlocks bei der Parallelverarbeitung in gem'sprockets '4.0
Finden Sie mit Swift eine Annäherung an log (1 + x)
Einschränkungsprogrammierung in Java
Java-Programmiergrundlagen Übungsarray
Teilen wird in Swift zu 0
Grundlagen der Try-with-Resources-Anweisung
Ausgabe in Vielfachen von 3
Parallele Ausführung in Java
Mehrdimensionales Array in Swift
Liste der Geräte, die mit Swift UI in der Vorschau angezeigt werden können
So ändern Sie die Hintergrundfarbe der Navigationsleiste usw. in der Swift-Benutzeroberfläche