Come si può controllare il numero di thread attivi in un'applicazione?
sobes.tech AI
Risposta dell'AI
In Go, per controllare il numero di thread attivi (goroutine), si utilizzano generalmente meccanismi di sincronizzazione e limitazione del parallelismo:
-
Canali con buffer come semafori: creano un canale con capacità limitata e, prima di avviare una goroutine, inviano un valore, e dopo aver terminato, ne ricevono uno, limitando così il numero di goroutine in esecuzione contemporaneamente.
-
Pacchetto
sync.WaitGroup: aiuta ad aspettare che un gruppo di goroutine finisca, ma non limita il loro numero. -
Pacchetto
golang.org/x/sync/semaphore: fornisce un semaforo comodo per limitare il parallelismo.
Esempio con un canale semaforo:
sem := make(chan struct{}, 5) // massimo 5 goroutine contemporaneamente
for _, task := range tasks {
sem <- struct{}{} // blocca se già ci sono 5 goroutine in esecuzione
go func(t Task) {
defer func() { <-sem }() // libera uno slot
process(t)
}(task)
}
// Attende che tutte le goroutine finiscano
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
In questo modo, si può controllare il numero di thread attivi ed evitare un consumo eccessivo di risorse.