Heim > Backend-Entwicklung > Golang > Wie können gleichzeitige Go-Routinen effektiv eingeschränkt werden?

Wie können gleichzeitige Go-Routinen effektiv eingeschränkt werden?

Barbara Streisand
Freigeben: 2024-11-02 05:25:02
Original
897 Leute haben es durchsucht

How to Effectively Limit Concurrent Go Routines?

Gleichzeitige Go-Routinen begrenzen

In Ihrem Code versuchen Sie, die Anzahl gleichzeitiger Goroutinen zu begrenzen. Die aktuelle Implementierung funktioniert jedoch nicht wie beabsichtigt. Hier ist ein alternativer Ansatz:

Lösung:

Anstatt für jede URL eine Goroutine zu erstellen, erstellen Sie eine feste Anzahl von Workern, die URLs aus einem gemeinsamen Kanal verarbeiten. Hier ist der geänderte Code:

<code class="go">parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()

// Workers get URLs from this channel
urls := make(chan string) 

// Feed the workers with URLs
go func() {
    for _, u := range flag.Args() {
        urls <- u
    }
    // Workers will exit from range loop when channel is closed
    close(urls)
}()

var wg sync.WaitGroup
client := rest.Client{}

results := make(chan string)

// Start the specified number of workers.
for i := 0; i < *parallel; i++ {
    wg.Add(1)
    go func() {
        defer wg.Done()
        for url := range urls {
            worker(url, client, results)
        }
    }()
}

// When workers are done, close results so that main will exit.
go func() {
    wg.Wait()
    close(results)
}()

for res := range results {
    fmt.Println(res)
}</code>
Nach dem Login kopieren

Erklärung:

  • Es werden gepufferte Kanal-URLs erstellt, die URLs an die Arbeiter weiterleiten.
  • Eine separate Goroutine ist dafür verantwortlich, den URL-Kanal mit den bereitgestellten URLs zu versorgen.
  • Die gewünschte Anzahl an Workern wird erstellt. Jeder Arbeiter ruft URLs aus dem URL-Kanal ab und verarbeitet sie seriell.
  • Wenn alle Arbeiter die Verarbeitung abgeschlossen haben, schließt eine Goroutine den Ergebniskanal, um zu signalisieren, dass alle Ergebnisse abgerufen wurden.

Dies Der Ansatz stellt sicher, dass zu jedem Zeitpunkt ein Maximum an parallelen Goroutinen aktiv ist, wodurch die Parallelität wie gewünscht begrenzt wird.

Das obige ist der detaillierte Inhalt vonWie können gleichzeitige Go-Routinen effektiv eingeschränkt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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