Junior — Middle
¿Se puede establecer un límite en el número de goroutines que se ejecutan simultáneamente en un programa?
sobes.tech AI
Respuesta de la IA
En el lenguaje Go no hay un mecanismo incorporado para establecer un límite rígido en la cantidad de goroutines que se ejecutan simultáneamente. Puede haber muchas goroutines, y su planificación y cambio de contexto son gestionados por el runtime de Go.
Sin embargo, si necesitas limitar el número de goroutines que se ejecutan simultáneamente (por ejemplo, para controlar el uso de recursos), puedes usar semáforos o canales para limitar el paralelismo.
Ejemplo de cómo limitar el número de goroutines que trabajan simultáneamente usando un canal:
package main
import (
"fmt"
"sync"
)
func worker(id int, sem chan struct{}, wg *sync.WaitGroup) {
defer wg.Done()
sem <- struct{}{} // adquirir recurso
fmt.Printf("Goroutine %d comenzó a trabajar\n", id)
// ... trabajo ...
fmt.Printf("Goroutine %d terminó de trabajar\n", id)
<-sem // liberar recurso
}
func main() {
const maxGoroutines = 5
sem := make(chan struct{}, maxGoroutines)
var wg sync.WaitGroup
for i := 0; i < 20; i++ {
wg.Add(1)
go worker(i, sem, &wg)
}
wg.Wait()
}
En este ejemplo, no habrá más de 5 goroutines trabajando simultáneamente.