Sobes.tech
Junior — Middle

É possível estabelecer um limite no número de goroutines que podem ser executadas simultaneamente num programa?

sobes.tech IA

Resposta da IA

Na linguagem Go, não existe um mecanismo incorporado para estabelecer um limite rígido no número de goroutines que podem ser executadas simultaneamente. Pode haver muitas goroutines, e o seu planeamento e troca de contexto são geridos pelo runtime do Go.

No entanto, se precisar limitar o número de goroutines a executar simultaneamente (por exemplo, para controlar o uso de recursos), pode usar semáforos ou canais para limitar o paralelismo.

Exemplo de como limitar o número de goroutines a trabalhar simultaneamente usando um 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 começou a trabalhar\n", id)
    // ... trabalho ...
    fmt.Printf("Goroutine %d terminou de trabalhar\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()
}

Neste exemplo, não haverá mais de 5 goroutines a trabalhar simultaneamente.