Sobes.tech
Junior — Middle

Jaka jest maksymalna liczba goroutines, które można uruchomić jednocześnie w aplikacji?

sobes.tech AI

Odpowiedź od AI

W Go nie ma ścisłego ograniczenia na maksymalną liczbę gorutyn uruchamianych jednocześnie. Teoretycznie można uruchomić ich bardzo dużo — dziesiątki, setki, a czasem miliony, w zależności od zasobów systemu (pamięć, CPU).

Gorutiny są bardzo lekkie w porównaniu do wątków systemu operacyjnego, ponieważ korzystają z dynamicznego stosu, który rośnie w razie potrzeby.

Jednak praktyczne ograniczenie zależy od:

  • Ilości dostępnej pamięci (każda gorutyna zajmuje co najmniej kilka kilobajtów).
  • Logiki aplikacji i synchronizacji między gorutynami.
  • Obciążenia planisty Go.

Przykład uruchomienia dużej liczby gorutyn:

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

    wg.Wait()
    fmt.Println("Wszystkie gorutiny zakończone")
}

Zatem ograniczenie jest bardziej praktyczne niż systemowe.