Junior — Middle
Ի՞նչ է առավելագույն քանակը գորուտինների, որոնք կարող են միաժամանակ գործարկվել ծրագրում:
sobes.tech AI
Պատասխան AI-ից
Go-ում չկա խիստ սահմանափակում միաժամանակ գործարկվող goroutines-ի առավելագույն թվի վրա: Теоретически, դրանք կարող են լինել շատ — տասնյակ, հարյուրավոր և նույնիսկ միլիոնավոր, կախված համակարգի ռեսուրսներից (հիշողություն, CPU):
Goroutines-ը շատ թեթև են համեմատած օպերացիոն համակարգի թելերի հետ, քանի որ օգտագործում են դինամիկ ստեկ, որը մեծանում է անհրաժեշտության դեպքում:
Սակայն, գործնական սահմանափակումը կախված է՝
- հասանելի հիշողության քանակից (յուրաքանչյուր goroutine զբաղեցնում է առնվազն մի քանի կիլոբայթ):
- ծրագրի տրամաբանությունից և goroutines-ների միջև սինխրոնիզացիայից:
- Go պլանավորողի բեռից:
Նմուշ՝ մեծ թվով goroutines գործարկելու:
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("Բոլոր goroutines-ները ավարտվեցին")
}
Այսպիսով, սահմանափակումը ավելի շատ գործնական է, քան համակարգային։