Junior — Middle
Care este numărul maxim de goroutines care pot fi pornite simultan într-o aplicație?
sobes.tech AI
Răspuns de la AI
În Go, nu există o restricție strictă asupra numărului maxim de goroutines care pot fi lansate simultan. Teoretic, se pot lansa foarte multe — zeci, sute și chiar milioane, în funcție de resursele sistemului (memorie, CPU).
Goroutines sunt foarte ușor comparativ cu firele de execuție ale sistemului de operare, deoarece utilizează o stivă dinamică care crește după necesitate.
Cu toate acestea, restricția practică depinde de:
- Cantitatea de memorie disponibilă (fiecare goroutine ocupă cel puțin câțiva kilobyte).
- Logica aplicației și sincronizarea între goroutines.
- Sarcina asupra planificatorului Go.
Exemplu de lansare a unui număr mare de goroutines:
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()
// muncă simplă
_ = i * 2
}(i)
}
wg.Wait()
fmt.Println("Toate goroutines au fost finalizate")
}
Prin urmare, restricția este mai mult una practică decât una sistemică.