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