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