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