Junior — Middle
Mekkora maximális goroutine szám futtatható egyszerre egy alkalmazásban?
sobes.tech MI
Válasz az MI-től
A Go-ban nincs szigorú korlátozás arra, hogy hány goroutine fusson egyszerre. Elméletileg nagyon sok — tíz-, száz-, sőt millió — is elindítható, a rendszer erőforrásaitól (memória, CPU) függően.
A goroutine-ok nagyon könnyűsúlyúak a rendszer szálaihoz képest, mivel dinamikus veremmel rendelkeznek, amely szükség szerint növekszik.
Azonban a gyakorlati korlátozás függ:
- A rendelkezésre álló memória mennyiségétől (minden goroutine legalább néhány kilobájt foglal).
- Az alkalmazás logikájától és a goroutine-ok közötti szinkronizációtól.
- A Go ütemező terhelésétől.
Példa sok goroutine indítására:
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()
// egyszerű munka
_ = i * 2
}(i)
}
wg.Wait()
fmt.Println("Minden goroutine befejeződött")
}
Tehát a korlátozás inkább gyakorlati, mint rendszer szintű.