Heim >Backend-Entwicklung >Golang >Wie kann eine konstante Anzahl gleichzeitig laufender Goroutinen in Go aufrechterhalten werden?

Wie kann eine konstante Anzahl gleichzeitig laufender Goroutinen in Go aufrechterhalten werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 00:49:14974Durchsuche

How to Maintain a Constant Number of Simultaneously Running Goroutines in Go?

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!

Stellungnahme:
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