Sobes.tech
Senior

Cosa succede se avvii 5 trilioni di goroutine? Come ottimizzare?

sobes.tech AI

Risposta dell'AI

Lanciare 5 trilioni di goroutine non è possibile nella pratica a causa delle limitazioni di memoria e risorse del sistema operativo. Le goroutine sono leggere, ma ognuna richiede uno stack (di default ~2KB), il che porterà a esaurire la memoria.

Cosa succederà:

  • La memoria si esaurirà rapidamente e il programma fallirà con un errore.
  • Le prestazioni diminuiranno drasticamente a causa del cambio di contesto.

Come ottimizzare:

  • Utilizzare un pool di goroutine (worker pool), limitando il numero di goroutine che lavorano contemporaneamente.
  • Dividere i compiti in batch più piccoli e processarli sequenzialmente o in parallelo con controllo del numero di goroutine.
  • Usare canali per gestire il carico e la sincronizzazione.
  • Rivedere la logica: forse non è necessario tanto parallelismo.

Esempio di pool di goroutine:

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)

In questo modo, controlliamo il numero di goroutine ed evitiamo l’esaurimento delle risorse.