Senior
Čo sa stane, ak spustíme 5 biliónov goroutines? Ako optimalizovať?
sobes.tech AI
Odpoveď od AI
Spustenie 5 biliónov goroutine nie je možné v praxi kvôli obmedzeniam pamäte a zdrojov operačného systému. Goroutine sú ľahké, ale každá vyžaduje zásobník (predvolene ~2KB), čo povedie k vyčerpaniu pamäte.
Čo sa stane:
- Pamäť sa rýchlo vyčerpá a program zlyhá s chybou.
- Výkon sa výrazne zníži kvôli prepínaniu kontextov.
Ako optimalizovať:
- Použiť pracovný bazén (worker pool), obmedziť počet súčasne bežiacich goroutine.
- Rozdeliť úlohy na menšie dávky a spracovávať ich sekvenčne alebo paralelne s kontrolou počtu goroutine.
- Použiť kanály na riadenie zaťaženia a synchronizáciu.
- Prehodnotiť logiku: možno nie je potrebný taký veľký paralelizmus.
Príklad bazéna 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)
Týmto kontrolujeme počet goroutine a vyhýbame sa vyčerpaniu zdrojov.