Sobes.tech
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.