Sobes.tech
Junior — Middle

¿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.