Sobes.tech
Senior

Ce se întâmplă dacă pornești 5 trilioane de goroutines? Cum optimizezi?

sobes.tech AI

Răspuns de la AI

Pornirea a 5 trilioane de goroutines nu este posibilă în practică din cauza limitărilor de memorie și resurse ale sistemului de operare. Goroutines sunt ușor, dar fiecare necesită o stivă (în mod implicit ~2KB), ceea ce va duce la epuizarea memoriei.

Ce se va întâmpla:

  • Memoria se va epuiza rapid, iar programul va eșua cu o eroare.
  • Performanța va scădea semnificativ din cauza schimbului de context.

Cum să optimizezi:

  • Folosește un pool de goroutines (worker pool), limitând numărul de goroutines care rulează simultan.
  • Împarte sarcinile în loturi mai mici și procesează-le secvențial sau în paralel cu control asupra numărului de goroutines.
  • Folosește canale pentru gestionarea încărcăturii și sincronizare.
  • Revizuiește logica: poate nu ai nevoie de atât de mult paralelism.

Exemplu 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)

Astfel, controlăm numărul de goroutines și evităm epuizarea resurselor.