Junior — Middle
Какъв е максималният брой горутини, които могат да бъдат стартирани едновременно в приложение?
sobes.tech AI
Отговор от AI
В Go няма строга граница за максималния брой горутини, които могат да бъдат изпълнявани едновременно. Теоретично, могат да бъдат стартирани много — десетки, стотици и дори милиони, в зависимост от ресурсите на системата (памет, CPU).
Горутините са много леки в сравнение с нишките на ОС, тъй като използват динамичен стек, който расте при необходимост.
Практическото ограничение обаче зависи от:
- наличното количество памет (всяка горутина заема поне няколко килобайта).
- логиката на приложението и синхронизацията между горутините.
- натоварването върху планировчика на Go.
Пример за стартиране на голям брой горутини:
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()
// проста работа
_ = i * 2
}(i)
}
wg.Wait()
fmt.Println("Всички горутини са завършили")
}
Следователно, ограничението е по-скоро практическо, отколкото системно.