Wie kann man die Anzahl der aktiven Threads in einer Anwendung kontrollieren?
sobes.tech KI
Antwort von AI
In Go wird zur Kontrolle der Anzahl aktiver Threads (Goroutinen) in der Regel Synchronisationsmechanismen und Begrenzungen des Parallelismus verwendet:
-
Pufferkanäle als Semaphoren: erstellen einen Kanal mit begrenzter Kapazität und senden vor dem Start einer Goroutine einen Wert hinein, nach Abschluss empfangen sie einen, wodurch die Anzahl gleichzeitig laufender Goroutinen begrenzt wird.
-
Paket
sync.WaitGroup: hilft, auf das Ende einer Gruppe von Goroutinen zu warten, begrenzt aber nicht deren Anzahl. -
Paket
golang.org/x/sync/semaphore: bietet einen praktischen Semaphor zur Begrenzung des Parallelismus.
Beispiel mit einem Kanal-Semaphor:
sem := make(chan struct{}, 5) // maximal 5 Goroutinen gleichzeitig
for _, task := range tasks {
sem <- struct{}{} // blockiert, wenn bereits 5 Goroutinen laufen
go func(t Task) {
defer func() { <-sem }() // freigeben eines Slots
process(t)
}(task)
}
// Warten, bis alle Goroutinen beendet sind
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Auf diese Weise kann die Anzahl der aktiven Threads kontrolliert und ein übermäßiger Ressourcenverbrauch vermieden werden.