Назад к вопросам
Senior
2
Сколько горутин можно создать одновременно?
Компании, где спрашивали
SberAuto
Ответ от нейросети
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("Все горутины завершены")
}
При этом стоит учитывать, что слишком большое количество горутин может привести к увеличению времени планирования и потреблению памяти, поэтому нужно балансировать количество горутин и доступные ресурсы.