Junior — Middle
Explique por que não é possível corresponder diretamente o número de threads ao número de goroutines em Go.
sobes.tech IA
Resposta da IA
Em Go, o número de goroutines não corresponde ao número de threads do sistema operativo, porque as goroutines são threads leves geridos pelo runtime do Go, não pelo SO.
Razões principais:
- Multiplexação: O runtime do Go distribui muitas goroutines por um número limitado de threads do sistema, alternando entre elas de forma eficiente.
- Leveza: Criar uma goroutine requer muito menos recursos do que criar um thread do sistema.
- Agendador do Go: Gerencia a execução das goroutines, permitindo que milhares delas trabalhem em vários threads.
Por isso, não se pode mapear diretamente o número de goroutines ao número de threads — normalmente, muitas goroutines por thread, o que permite usar os recursos de forma eficiente e simplifica a programação concorrente.
Exemplo:
runtime.GOMAXPROCS(4) // Define o número de threads do SO
for i := 0; i < 1000; i++ {
go func(id int) {
fmt.Println("Goroutine", id)
}(i)
}
Aqui, 1000 goroutines irão trabalhar em 4 threads do sistema.