Junior — Middle
Ist es möglich, eine Grenze für die Anzahl der gleichzeitig laufenden Goroutines in einem Programm festzulegen?
sobes.tech KI
Antwort von AI
In der Programmiersprache Go gibt es keinen eingebauten Mechanismus, um eine harte Begrenzung für die Anzahl gleichzeitig laufender Goroutines festzulegen. Es kann sehr viele Goroutines geben, und deren Planung und Umschaltung werden vom Go-Runtime übernommen.
Wenn jedoch die Anzahl der gleichzeitig laufenden Goroutines (z.B. zur Ressourcensteuerung) beschränkt werden soll, können Semaphore oder Kanäle verwendet werden, um die Parallelität zu begrenzen.
Beispiel zur Begrenzung der gleichzeitig laufenden Goroutines mit einem Kanal:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Ressource erwerben
fmt.Printf("Goroutine %d hat mit der Arbeit begonnen\n", id)
// ... Arbeit ...
fmt.Printf("Goroutine %d hat die Arbeit beendet\n", id)
<-sem // Ressource freigeben
}
func main() {
const maxGoroutines = 5
sem := make(chan struct{}, maxGoroutines)
var wg sync.WaitGroup
for i := 0; i < 20; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
In diesem Beispiel arbeiten höchstens 5 Goroutines gleichzeitig.