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.