Sobes.tech
Senior

O que acontecerá se iniciar 5 trilhões de goroutines? Como otimizar?

sobes.tech IA

Resposta da IA

A execução de 5 trilhões de goroutines não é possível na prática devido às limitações de memória e recursos do sistema operativo. As goroutines são leves, mas cada uma requer uma pilha (por padrão ~2KB), o que levará ao esgotamento da memória.

O que acontecerá:

  • A memória acabará rapidamente e o programa falhará com um erro.
  • O desempenho diminuirá significativamente devido à troca de contexto.

Como otimizar:

  • Utilizar um pool de goroutines (worker pool), limitando o número de goroutines a trabalhar simultaneamente.
  • Dividir as tarefas em lotes menores e processá-las sequencialmente ou em paralelo com controlo do número de goroutines.
  • Utilizar canais para gerir a carga e a sincronização.
  • Rever a lógica: talvez não seja necessário tanto paralelismo.

Exemplo de pool de goroutines:

const workerCount = 100
jobs := make(chan Job)

for i := 0; i < workerCount; i++ {
    go func() {
        for job := range jobs {
            process(job)
        }
    }()
}

for _, job := range allJobs {
    jobs <- job
}
close(jobs)

Desta forma, controlamos o número de goroutines e evitamos o esgotamento de recursos.