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.