Junior — Middle
¿Es posible establecer un límite en el número de hilos que trabajan simultáneamente en el lenguaje Go?
sobes.tech AI
Respuesta de la IA
En Go no hay un mecanismo incorporado para limitar directamente el número de goroutines (hilos) que se ejecutan simultáneamente. Puede haber muchas goroutines, y son ligeras. Para limitar el número de goroutines que se ejecutan al mismo tiempo, generalmente se usan semáforos o canales con capacidad limitada.
Ejemplo de cómo limitar el número de goroutines que se ejecutan simultáneamente usando un canal:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // Reservar un espacio
fmt.Printf("Trabajador %d iniciado\n", id)
time.Sleep(time.Second) // Trabajo
fmt.Printf("Trabajador %d terminado\n", id)
<-sem // Liberar un espacio
}
func main() {
const maxConcurrent = 3
sem := make(chan struct{}, maxConcurrent) // Canal con límite
var wg sync.WaitGroup
for i := 1; i <= 10; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
Aquí, el canal sem con un búfer de maxConcurrent limita el número de goroutines que se ejecutan simultáneamente a 3.