Sobes.tech
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.