Threading von Goroutinen in Go: Gleichzeitiges Ausführen einer konstanten Zahl
Der Bereich der Go-Parallelität bietet eine Fülle von Materialien zum Warten auf den Abschluss einer bestimmten Anzahl von Goroutinen. Es stellt sich jedoch eine besondere Herausforderung dar: die kontinuierliche Ausführung einer vordefinierten Anzahl von Goroutinen sicherzustellen, wobei eine beginnt, während die andere endet.
Stellen Sie sich ein Szenario mit einer beträchtlichen Menge an Aufgaben vor, beispielsweise die Verarbeitung von Daten, die von MySQL abgerufen wurden Datenbank. Ein naiver Ansatz könnte eine große Anzahl paralleler Goroutinen initiieren und gleichzeitig Hunderttausende Aufgaben ausführen. Im Gegensatz dazu begrenzt das gewünschte Verhalten die gleichzeitig ausgeführten Goroutinen auf eine feste Anzahl (z. B. 20).
Dieses kontrollierte Parallelitätsmuster wird als „begrenzte Parallelität“ bezeichnet. Die Implementierung dieses Musters in Go erfordert die Verwendung eines Kanals leerer Strukturen als Semaphor, der die maximale Anzahl gleichzeitiger Worker-Goroutinen vorgibt. Hier ist eine Illustration:
package main import "fmt" func main() { maxGoroutines := 10 guard := make(chan struct{}, maxGoroutines) for i := 0; i < 30; i++ { guard <- struct{}{} // blocks if guard channel is full go func(n int) { worker(n) <-guard // unlocks a slot in guard }(i) } } func worker(i int) { fmt.Println("doing work on", i) }
Diese Implementierung stellt sicher, dass nicht mehr als die angegebene Anzahl von Goroutinen gleichzeitig ausgeführt werden. Wenn eine Worker-Goroutine beendet ist, wird daher sofort eine neue Goroutine gestartet, die den gewünschten Parallelitätsgrad beibehält.
Der Artikel „Go-Parallelitätsmuster“ untersucht dieses Konzept im Abschnitt „Begrenzte Parallelität“ weiter und bietet tiefergehende Informationen Einblicke in diese entscheidende Parallelitätstechnik.
Das obige ist der detaillierte Inhalt vonWie kann eine konstante Anzahl gleichzeitig laufender Goroutinen in Go aufrechterhalten werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!