Sobes.tech
Senior

Ha GOMAXPROCS=2 és két végtelen ciklus fut matematikai műveletekkel, futnak-e más goroutine-ok?

sobes.tech MI

Válasz az MI-től

Ha GOMAXPROCS=2, az azt jelenti, hogy a Go ütemezője egyszerre 2 OS-szálat használhat a gorutinek végrehajtására.

Ha két végtelen ciklus fut intenzív matematikai műveletekkel, azok mindkét szálat teljesen elfoglalják, mivel nem végeznek blokkoló hívásokat vagy bemenet/kimenet műveleteket.

Ennek eredményeként más goroutine-ok nem kaphatnak CPU-időt, és végrehajtásuk jelentősen késleltetve vagy szinte megállva lesz.

Egy ilyen helyzet megoldásához csökkenteni kell ezeket a ciklusokat terhelésüket, hozzá kell adni pontokat, ahol a goroutine-ok runtime.Gosched() hívnak vagy blokkoló műveleteket végeznek, vagy növelni kell a GOMAXPROCS értékét, hogy több szálat adjon az ütemezőnek.