Junior — Middle
Wie bestimmt man das Limit für die gleichzeitige Ausführung von Goroutines in der Programmiersprache Go?
sobes.tech KI
Antwort von AI
In der Programmiersprache Go gibt es keinen eingebauten Mechanismus, um die Anzahl der gleichzeitig laufenden Goroutines direkt zu begrenzen. Um jedoch das Parallelitätslimit zu steuern, verwendet man in der Regel Semaphore oder Kanäle mit begrenzter Kapazität.
Beispiel zur Begrenzung der gleichzeitig laufenden Goroutines mit einem Kanal:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Slot reservieren
fmt.Printf("Goroutine %d hat die Arbeit begonnen\n", id)
time.Sleep(time.Second) // Arbeit simulieren
fmt.Printf("Goroutine %d hat die Arbeit beendet\n", id)
<-sem // Slot freigeben
}
func main() {
const maxGoroutines = 3
sem := make(chan struct{}, maxGoroutines) // Kanal mit Puffer begrenzt die Anzahl der Goroutines
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
In diesem Beispiel begrenzt der Kanal sem mit Puffer maxGoroutines die Anzahl der gleichzeitig laufenden Goroutines. Jede Goroutine reserviert vor Beginn der Arbeit einen Slot im Kanal und gibt ihn nach Abschluss wieder frei. Somit arbeiten nie mehr als maxGoroutines Goroutines gleichzeitig.