Heim > Backend-Entwicklung > Golang > Warum wird meine Go WaitGroup beim gleichzeitigen Herunterladen von Dateien nicht abgeschlossen?

Warum wird meine Go WaitGroup beim gleichzeitigen Herunterladen von Dateien nicht abgeschlossen?

Barbara Streisand
Freigeben: 2024-11-28 07:35:12
Original
748 Leute haben es durchsucht

Why Doesn't My Go WaitGroup Complete When Downloading Files Concurrently?

WaitGroup wird in Go-Parallelität nicht abgeschlossen

Der bereitgestellte Code versucht, mehrere Dateien gleichzeitig aus einer Liste von URLs herunterzuladen und zu speichern. Die Haupt-Goroutine wird jedoch nie beendet, da die sync.WaitGroup nie abgeschlossen wird.

Zwei Probleme identifiziert:

  1. Synchronisierungsprobleme:
    In downloadFromURL() sollte der Aufruf wg.Done() als eine der ersten Anweisungen aufgerufen werden, nicht am Ende der Funktion. Dadurch wird sichergestellt, dass die WaitGroup korrekt dekrementiert wird, auch wenn die Funktion vorzeitig zurückkehrt.
  2. Parallelitätszeiger:
    Die Funktion downloadFromURL() sollte einen Zeiger auf die sync.WaitGroup erhalten, um die Freigabe zu manipulieren Objekt richtig platzieren. Andernfalls wird durch die Übergabe der WaitGroup als Wert eine Kopie erstellt und an der Kopie vorgenommene Änderungen werden nicht in der Haupt-Goroutine widergespiegelt.

Optimierter Code:

func downloadFromURL(url string, wg *sync.WaitGroup) error {
    defer wg.Done()  // Moved to the beginning of the function

    ... // Other code
}

func main() {
    ...

    for _, url := range links {
        if isExcelDocument(url) {
            wg.Add(1)
            go downloadFromURL(url, &wg)  // Pass pointer to WaitGroup
        } else {
            fmt.Printf("Skipping: %v \n", url)
        }
    }
    ...
}
Nach dem Login kopieren

Durch die Behebung dieser Probleme kann die WaitGroup die Anzahl der ausgeführten Goroutinen genau verfolgen und die Haupt-Goroutine wird beendet, sobald alle Downloads abgeschlossen sind.

Das obige ist der detaillierte Inhalt vonWarum wird meine Go WaitGroup beim gleichzeitigen Herunterladen von Dateien nicht abgeschlossen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage