Junior — Middle
Como é que se pode controlar o número de threads ativas numa aplicação?
sobes.tech IA
Resposta da IA
Em Go, para controlar o número de threads ativos (goroutines), geralmente utilizam-se mecanismos de sincronização e limitação do paralelismo:
-
Canais com buffer como semáforos: criam um canal com capacidade limitada e, antes de iniciar uma goroutine, enviam um valor para ele, e após terminar, recebem um, limitando assim o número de goroutines que podem estar em execução simultânea.
-
Pacote
sync.WaitGroup: ajuda a esperar que um grupo de goroutines termine, mas não limita seu número. -
Pacote
golang.org/x/sync/semaphore: fornece um semáforo conveniente para limitar o paralelismo.
Exemplo usando um canal semáforo:
sem := make(chan struct{}, 5) // máximo de 5 goroutines ao mesmo tempo
for _, task := range tasks {
sem <- struct{}{} // bloqueia se já houver 5 goroutines em execução
go func(t Task) {
defer func() { <-sem }() // libera uma vaga
process(t)
}(task)
}
// Espera até que todas as goroutines terminem
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Dessa forma, é possível controlar o número de threads ativas e evitar consumo excessivo de recursos.