Senior
Šta će se desiti ako pokrenemo 5 triliona goroutines? Kako optimizovati?
sobes.tech АИ
Одговор од АИ
Pokretanje 5 triliona goroutine nije moguće u praksi zbog ograničenja memorije i resursa operativnog sistema. Goroutine su lagane, ali svaka zahteva stog (podrazumevano ~2KB), što će dovesti do iscrpljenja memorije.
Šta će se desiti:
- Memorija će se brzo istrošiti, a program će se srušiti sa greškom.
- Performanse će se znatno smanjiti zbog prebacivanja konteksta.
Kako optimizovati:
- Koristiti bazen radnika (worker pool), ograničavajući broj istovremeno aktivnih goroutine.
- Podeliti zadatke na manje partije i obrađivati ih redom ili paralelno sa kontrolom broja goroutine.
- Koristiti kanale za upravljanje opterećenjem i sinhronizaciju.
- Preispitati logiku: možda nije potrebno toliko paralelizma.
Primer bazena 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)
Na ovaj način kontrolišemo broj goroutine-a i izbegavamo iscrpljivanje resursa.