Junior — Middle
Is het mogelijk om een limiet te stellen aan het aantal gelijktijdig uitgevoerde goroutines in een programma?
sobes.tech AI
Antwoord van AI
In de programmeertaal Go is er geen ingebouwd mechanisme om een harde limiet te stellen aan het aantal gelijktijdig gestartde goroutines. Er kunnen heel veel goroutines zijn, en hun planning en schakeling worden beheerd door de Go-runtime.
Als je echter het aantal gelijktijdig uitgevoerde goroutines wilt beperken (bijvoorbeeld om het gebruik van bronnen te controleren), kun je semaforen of kanalen gebruiken om de paralleliteit te beperken.
Voorbeeld van het beperken van het aantal gelijktijdig werkende goroutines met behulp van een kanaal:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // resource verkrijgen
fmt.Printf("Goroutine %d begint te werken\n", id)
// ... werk ...
fmt.Printf("Goroutine %d heeft gewerkt\n", id)
<-sem // resource vrijgeven
}
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 dit voorbeeld zullen niet meer dan 5 goroutines gelijktijdig werken.