Sobes.tech
Junior — Middle

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.