Ինչպես է տեղի ունենում չորս գորուտինների բաշխումը չորս պրոցեսորային միջուկների վրա նրանց մեկնարկի ժամանակ?
sobes.tech AI
Պատասխան AI-ից
Go-յում, goroutine-ների (Goroutine scheduler) պլանավորիչը բաժանում է goroutine-ները համակարգային թելերի (M) միջև, որոնք իր հերթին կապված են պրոցեսորի միջուկների հետ:
Եթե ունեք 4 goroutine և 4 պրոցեսորի միջուկ, ապա պլանավորիչը կարող է յուրաքանչյուր goroutine-ին բաժանել առանձին միջուկի վրա, ապահովելով համաժամանակյա կատարմամբ: Սա հնարավոր է, եթե միջավայրի փոփոխական GOMAXPROCS-ը սահմանված է 4-ով (համապատասխան ժամանակակից Go տարբերակներում, այն հավասար է հասանելի միջուկների թվին):
Օրինակ՝
runtime.GOMAXPROCS(4) // սահմանում է հասանելի թելերի թիվը 4
for i := 0; i < 4; i++ {
go func(id int) {
fmt.Printf("Goroutine %d մեկնարկեց\n", id)
// աշխատանք
}(i)
}
Go պլանավորիչը կբաժանի goroutine-ները տարբեր թելերի միջև, որոնք կարող են կատարվել տարբեր միջուկների վրա, ինչը թույլ է տալիս արդյունավետ օգտագործել բազմամիջուկային համակարգերը: Սակայն, ճշգրիտ բաժանումը կախված է համակարգի բեռից և ներքին պլանավորիչից։