Sobes.tech
Senior

Mi történik, ha elindítunk 5 billió goroutine-t? Hogyan optimalizáljunk?

sobes.tech MI

Válasz az MI-től

Az 5 trillió goroutine indítása nem lehetséges a gyakorlatban az operációs rendszer memória- és erőforrás-korlátai miatt. A goroutine-ok könnyűsúlyúak, de mindegyikhez szükség van egy veremre (alapértelmezett ~2KB), ami memória kimerüléséhez vezet.

Mi fog történni:

  • A memória gyorsan elfogy, és a program hibával leáll.
  • A teljesítmény jelentősen csökken a kontextusváltás miatt.

Hogyan optimalizáljunk:

  • Használjunk munkáscsoportot (worker pool), korlátozva a párhuzamosan futó goroutine-ok számát.
  • Osszuk fel a feladatokat kisebb adagokra, és dolgozzuk fel őket szekvenciálisan vagy párhuzamosan a goroutine-ok számának ellenőrzése mellett.
  • Használjunk csatornákat a terhelés kezelésére és szinkronizációra.
  • Vizsgáljuk felül a logikát: lehet, hogy nincs szükség ennyi párhuzamosságra.

Goroutine csoport példája:

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)

Így kontrolláljuk a goroutine-ok számát, és elkerüljük az erőforrások kimerülését.