Sobes.tech
Junior — Middle

Свързан ли е броят на създаваните горутини с броя ядра в процесора?

sobes.tech AI

Отговор от AI

Броят на създаваните горутини в Go не е пряко свързан с броя на ядрата на процесора. Може да създадете много горутини — те са леки потоци, управлявани от рантайма на Go, и техният брой е предимно ограничен от наличната памет и логиката на програмата.

Броят на ядрата влияе върху броя на операционните системни потоци, които могат да се изпълняват едновременно, както и на параметъра GOMAXPROCS, който задава максималния брой потоци, изпълняващи горутини паралелно. Но броят на горутините обикновено значително надвишава броя на ядрата, тъй като те се планират и превключват ефективно вътре в рантайма.

Пример:

runtime.GOMAXPROCS(4) // Използваме 4 ядра

for i := 0; i < 1000; i++ {
    go func(n int) {
        fmt.Println("Goroutine", n)
    }(i)
}
time.Sleep(time.Second)

Тук се създават 1000 горутини, въпреки че има само 4 ядра.