¿Cómo se puede controlar el número de hilos activos en una aplicación?
sobes.tech AI
Respuesta de la IA
En Go, para controlar el número de hilos activos (goroutines), generalmente se utilizan mecanismos de sincronización y limitación del paralelismo:
-
Canales con búfer como semáforos: crean un canal con capacidad limitada y, antes de iniciar una goroutine, envían un valor a él, y después de terminar, reciben uno, limitando así el número de goroutines que se ejecutan simultáneamente.
-
Paquete
sync.WaitGroup: ayuda a esperar a que un grupo de goroutines termine, pero no limita su número. -
Paquete
golang.org/x/sync/semaphore: proporciona un semáforo conveniente para limitar el paralelismo.
Ejemplo usando un canal semáforo:
sem := make(chan struct{}, 5) // máximo 5 goroutines simultáneas
for _, task := range tasks {
sem <- struct{}{} // bloquea si ya hay 5 goroutines en ejecución
go func(t Task) {
defer func() { <-sem }() // libera un espacio
process(t)
}(task)
}
// Espera a que todas las goroutines terminen
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
De esta forma, se puede controlar el número de hilos activos y evitar un consumo excesivo de recursos.