Sobes.tech
Junior — Middle

Ինչպես է տեղի ունենում չորս գորուտինների բաշխումը չորս պրոցեսորային միջուկների վրա նրանց մեկնարկի ժամանակ?

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-ները տարբեր թելերի միջև, որոնք կարող են կատարվել տարբեր միջուկների վրա, ինչը թույլ է տալիս արդյունավետ օգտագործել բազմամիջուկային համակարգերը: Սակայն, ճշգրիտ բաժանումը կախված է համակարգի բեռից և ներքին պլանավորիչից։