Junior — Middle
Ist es möglich, eine Begrenzung für die gleichzeitig laufenden Threads in der Programmiersprache Go festzulegen?
sobes.tech KI
Antwort von AI
In Go gibt es keinen eingebauten Mechanismus, um die Anzahl der gleichzeitig laufenden Goroutines (leichte Threads) direkt zu beschränken. Es kann viele Goroutines geben, und sie sind leichtgewichtig. Um die Anzahl der gleichzeitig laufenden Goroutines zu begrenzen, 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("Worker %d gestartet\n", id)
time.Sleep(time.Second) // Arbeit
fmt.Printf("Worker %d beendet\n", id)
<-sem // Slot freigeben
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // Kanal mit Begrenzung
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Hier begrenzt der Kanal sem mit Puffergröße maxConcurrent die Anzahl der gleichzeitig laufenden Goroutines auf 3.