Junior — Middle
Kiek maksimalių gorutinų galima vienu metu paleisti programoje?
sobes.tech AI
Atsakymas iš AI
Go kalboje nėra griežto apribojimo maksimaliai vienu metu paleidžiamų gorutinių skaičiui. Teoriškai jų gali būti labai daug — dešimtys, šimtai ir kartais milijonai, priklausomai nuo sistemos išteklių (atminties, CPU).
Gorutinos yra labai lengvos, palyginti su operacinės sistemos siūlais, nes jos naudoja dinaminį steką, kuris auga pagal poreikį.
Tačiau praktinis apribojimas priklauso nuo:
- Turimos atminties kiekio (kiekviena gorutina užima mažiausiai kelis kilobaitus).
- Programos logikos ir sinchronizacijos tarp gorutinų.
- Go planuotojo apkrovos.
Pavyzdys, kaip paleisti daug gorutinų:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
const n = 100000
wg.Add(n)
for i := 0; i < n; i++ {
go func(i int) {
defer wg.Done()
// paprastas darbas
_ = i * 2
}(i)
}
wg.Wait()
fmt.Println("Visos gorutinos baigė darbą")
}
Todėl apribojimas labiau praktinis nei sisteminis.