Sobes.tech
Senior

Wat gebeurt er als je 5 biljoen goroutines start? Hoe optimaliseer je?

sobes.tech AI

Antwoord van AI

Het starten van 5 biljoen goroutines is in de praktijk niet mogelijk vanwege geheugen- en resourcebeperkingen van het besturingssysteem. Goroutines zijn lichtgewicht, maar elke vereist een stack (standaard ~2KB), wat zal leiden tot geheugenuitputting.

Wat er zal gebeuren:

  • Het geheugen raakt snel op en het programma crasht met een fout.
  • De prestaties zullen sterk afnemen door contextswitching.

Hoe te optimaliseren:

  • Gebruik een worker pool, waarbij het aantal gelijktijdig werkende goroutines wordt beperkt.
  • Verdeel taken in kleinere batches en verwerk ze sequentieel of parallel met controle over het aantal goroutines.
  • Gebruik kanalen om de belasting te beheren en te synchroniseren.
  • Herzie de logica: misschien is zoveel parallelisme niet nodig.

Voorbeeld van een goroutine pool:

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)

Op deze manier controleren we het aantal goroutines en voorkomen we resource-uitputting.