Sobes.tech
Back to questions
Senior
1

Сколько горутин можно создать одновременно?

Companies where asked
SberAuto

Answer from AI

sobes.tech AI

В Go количество горутин, которые можно создать одновременно, ограничено в основном ресурсами системы (памятью и процессорным временем), а не самим языком. Теоретически можно создать сотни тысяч и даже миллионы горутин, так как они очень легковесны по сравнению с потоками ОС.

Горутины занимают небольшой стек (начинается примерно с 2 КБ и может динамически расти), поэтому ограничение по памяти — главный фактор.

Пример создания большого количества горутин:

package main

import (
    "fmt"
    "sync"
)

func main() {
    var wg sync.WaitGroup
    const num = 100000
    wg.Add(num)

    for i := 0; i < num; i++ {
        go func(n int) {
            defer wg.Done()
            // какая-то работа
            if n%20000 == 0 {
                fmt.Println("Горутина", n)
            }
        }(i)
    }

    wg.Wait()
    fmt.Println("Все горутины завершены")
}

При этом стоит учитывать, что слишком большое количество горутин может привести к увеличению времени планирования и потреблению памяти, поэтому нужно балансировать количество горутин и доступные ресурсы.