Heim >Backend-Entwicklung >Golang >Wie verwaltet man eine feste Anzahl gleichzeitiger Goroutinen in Go?
Aufrechterhaltung einer festen Anzahl gleichzeitig laufender Goroutinen
In Go können Sie auf Szenarien stoßen, in denen die Kontrolle der Anzahl gleichzeitig laufender Goroutinen von entscheidender Bedeutung ist. Während sich Tutorials oft darauf konzentrieren, auf den Abschluss von Goroutinen zu warten, stellt das Erreichen einer bestimmten Anzahl aktiver Goroutinen zu einem bestimmten Zeitpunkt eine andere Herausforderung dar.
Stellen Sie sich die folgende Situation vor: Sie müssen Hunderttausende Aufgaben bearbeiten. Für die Verarbeitung jeder Aufgabe ist eine eigene Goroutine erforderlich, Ihre Systemressourcen können jedoch nur maximal 20 Goroutinen gleichzeitig verarbeiten. Sie müssen sicherstellen, dass immer 20 Goroutinen ausgeführt werden und eine neue gestartet wird, sobald eine vorhandene abgeschlossen ist.
Begrenzte Parallelität
Um dies zu erreichen, werden die Go-Parallelitätsmuster verwendet Der Artikel schlägt die Verwendung eines Musters namens „Bounded Parallelism“ vor. Dabei wird ein Kanal leerer Strukturen als Schutz verwendet, um die Anzahl gleichzeitiger Arbeiter zu begrenzen.
Implementierung
Hier ist ein Beispiel, das zeigt, wie dieses Muster implementiert wird:
package main import ( "fmt" "sync" ) func main() { const maxGoroutines = 20 // Create a channel of empty structs to control worker count guard := make(chan struct{}, maxGoroutines) var wg sync.WaitGroup // Launch workers for i := 0; i < 30; i++ { wg.Add(1) guard <- struct{}{} // Blocks if guard channel is filled go func(n int) { defer wg.Done() worker(n) <-guard // Release slot in guard channel }(i) } wg.Wait() } func worker(i int) { fmt.Println("doing work on", i) }
In diesem Beispiel wird der Guard-Kanal als Token-Bucket verwendet. Die maximale Anzahl von Goroutinen, die gleichzeitig ausgeführt werden können, ist durch die Kapazität des Kanals begrenzt (in diesem Fall 20). Jede Goroutine erhält vor Arbeitsbeginn ein „Token“ (eine leere Struktur) vom Kanal. Wenn eine Goroutine fertig ist, gibt sie ihr Token wieder in den Kanal frei und macht es so für eine andere Goroutine zum Erwerb verfügbar. Indem Sie die Anzahl der Token im Kanal steuern, steuern Sie effektiv die Anzahl gleichzeitiger Goroutinen.
Das obige ist der detaillierte Inhalt vonWie verwaltet man eine feste Anzahl gleichzeitiger Goroutinen in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!