Sobes.tech
Junior — Middle

Kiek maksimalių gorutinų galima vienu metu paleisti programoje?

sobes.tech AI

Atsakymas iš AI

Go kalboje nėra griežto apribojimo maksimaliai vienu metu paleidžiamų gorutinių skaičiui. Teoriškai jų gali būti labai daug — dešimtys, šimtai ir kartais milijonai, priklausomai nuo sistemos išteklių (atminties, CPU).

Gorutinos yra labai lengvos, palyginti su operacinės sistemos siūlais, nes jos naudoja dinaminį steką, kuris auga pagal poreikį.

Tačiau praktinis apribojimas priklauso nuo:

  • Turimos atminties kiekio (kiekviena gorutina užima mažiausiai kelis kilobaitus).
  • Programos logikos ir sinchronizacijos tarp gorutinų.
  • Go planuotojo apkrovos.

Pavyzdys, kaip paleisti daug gorutinų:

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

    wg.Wait()
    fmt.Println("Visos gorutinos baigė darbą")
}

Todėl apribojimas labiau praktinis nei sisteminis.