Sobes.tech
Junior — Middle

Qual è il numero massimo di goroutine che possono essere avviate contemporaneamente in un'applicazione?

sobes.tech AI

Risposta dell'AI

In Go non esiste un limite rigido al numero massimo di goroutine che possono essere eseguite contemporaneamente. Teoricamente, se ne possono avviare molte — decine, centinaia e talvolta milioni, a seconda delle risorse del sistema (memoria, CPU).

Le goroutine sono molto leggere rispetto ai thread del sistema operativo, poiché utilizzano uno stack dinamico che cresce secondo necessità.

Tuttavia, la limitazione pratica dipende da:

  • La quantità di memoria disponibile (ogni goroutine occupa almeno qualche kilobyte).
  • La logica dell'applicazione e la sincronizzazione tra le goroutine.
  • Il carico sul scheduler di Go.

Esempio di avvio di molte goroutine:

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()
            // lavoro semplice
            _ = i * 2
        }(i)
    }

    wg.Wait()
    fmt.Println("Tutte le goroutine sono terminate")
}

Pertanto, il limite è più pratico che sistemico.