Junior — Middle
Is het mogelijk om een limiet te stellen aan het aantal gelijktijdig werkende threads in de Go-taal?
sobes.tech AI
Antwoord van AI
In Go is er geen ingebouwd mechanisme om het aantal gelijktijdig werkende goroutines (lichte draden) direct te beperken. Er kunnen veel goroutines zijn, en ze zijn lichtgewicht. Om het aantal gelijktijdig werkende goroutines te beperken, worden meestal semaforen of kanalen met beperkte capaciteit gebruikt.
Voorbeeld van het beperken van het aantal gelijktijdig werkende goroutines met behulp van een kanaal:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Reserveren van een plek
fmt.Printf("Werker %d gestart\n", id)
time.Sleep(time.Second) // Werk
fmt.Printf("Werker %d klaar\n", id)
<-sem // Vrijmaken van een plek
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // Kanaal met limiet
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Hier beperkt het kanaal sem met een buffer van maxConcurrent het aantal gelijktijdig werkende goroutines tot 3.