Sobes.tech
Middle

Como é que o sistema se comportará ao iniciar 10 000 threads ao mesmo tempo?

sobes.tech IA

Resposta da IA

A execução de 10.000 goroutines em Go é possível e geralmente não causa problemas, pois as goroutines são muito leves em comparação com os threads do sistema. O runtime do Go gerencia eficazmente sua programação e distribuição nos threads do sistema.

No entanto, com tal quantidade de goroutines, é importante considerar:

  • Memória: cada goroutine inicia com uma pequena pilha (normalmente 2 KB), mas à medida que a pilha cresce, o consumo de memória aumenta.
  • Competição por recursos: se todas as goroutines estiverem ativamente trabalhando e bloqueando em recursos compartilhados, pode ocorrer degradação de desempenho.
  • O escalonador do Go: distribui eficientemente as goroutines, mas em quantidade extrema, pode aumentar os custos de gerenciamento.

Exemplo de execução de 10.000 goroutines:

for i := 0; i < 10000; i++ {
    go func(id int) {
        // algum trabalho
        fmt.Println("Goroutine", id)
    }(i)
}

// É necessário esperar que as goroutines terminem, por exemplo, usando sync.WaitGroup

No geral, o Go permite escalar o número de goroutines muito além de 10.000, mas é importante monitorar o consumo de memória e bloqueios.