Heim >Backend-Entwicklung >Golang >Golang-Parallelprogrammierung für Fortgeschrittene: Vertiefendes Verständnis von WaitGroup
Erweiterte gleichzeitige Programmierung in Golang: Vertiefendes Verständnis von WaitGroup
Einführung:
Die gleichzeitige Programmierung ist eine der leistungsstärksten Funktionen von Golang. Bei der parallelen Ausführung mehrerer Aufgaben besteht ein häufiges Szenario darin, zu warten, bis alle Aufgaben abgeschlossen sind, bevor mit dem nächsten Schritt fortgefahren wird. Das Synchronisierungspaket in Golang bietet WaitGroup ein gutes Tool zur Lösung dieses Problems. Dieser Artikel bietet eine ausführliche Einführung in die Verwendung von WaitGroup und gibt spezifische Codebeispiele.
1. Was ist WaitGroup?
WaitGroup ist eine Struktur im Sync-Paket in Golang. Sie bietet einen einfachen und effektiven Mechanismus, um darauf zu warten, dass alle Goroutinen ihre Aufgaben erledigen. WaitGroup verwaltet intern einen Zähler. Der Wert des Zählers kann durch die Methode Add() erhöht werden, der Wert des Zählers kann durch die Methode Done() verringert werden und die Methode Wait() wird verwendet, um den aktuellen Thread zu blockieren der Zähler geht auf Null zurück.
2. Grundlegende Verwendung von WaitGroup:
Zuerst müssen wir das Synchronisierungspaket importieren:
import "sync"Add()-Methode zum Festlegen der Anforderungen. Anzahl der wartenden Aufgaben:
var wg sync.WaitGroup
wg.Add(2)
go task1() go task2()
func task1() { defer wg.Done() // 执行task1的操作 } func task2() { defer wg.Done() // 执行task2的操作 }Auf diese Weise wartet der Hauptthread, bis alle Aufgaben abgeschlossen sind, bevor er mit dem nächsten Schritt fortfährt.
Angenommen, wir müssen mehrere Netzwerkbilder gleichzeitig herunterladen und lokal speichern. Wenn alle Bilder heruntergeladen sind, müssen wir eine weitere Verarbeitung durchführen. Das Codebeispiel lautet wie folgt:
wg.Wait()
Im obigen Beispielcode definieren wir zunächst eine Variable auf Paketebene wg, um den Zähler zu verwalten, der auf den Abschluss der Aufgabe wartet. In der Hauptfunktion legen wir die Anzahl der wartenden Aufgaben auf die Anzahl der Bild-URLs fest und starten dann jede Bild-Download-Aufgabe gleichzeitig. Rufen Sie nach Abschluss jeder Aufgabe die Methode wg.Done() auf, um den Zählerwert zu verringern. Rufen Sie abschließend die Methode wg.Wait() auf, um zu warten, bis alle Aufgaben abgeschlossen sind. Wenn alle Bilder heruntergeladen sind, fahren Sie mit der weiteren Verarbeitung fort.
Das obige ist der detaillierte Inhalt vonGolang-Parallelprogrammierung für Fortgeschrittene: Vertiefendes Verständnis von WaitGroup. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!