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