Senior
Jei GOMAXPROCS=2 ir du begaliniai ciklai su matematinių operacijų, ar bus vykdomos kitos goroutines?
sobes.tech AI
Atsakymas iš AI
Jei GOMAXPROCS=2, tai reiškia, kad Go planuotojas gali vienu metu naudoti 2 OS gijas gorutinos vykdymui.
Jei vykdomi du begaliniai ciklai su intensyviomis matematinėmis operacijomis, jie užims abi gijas visiškai, nes nevykdo blokuojančių iškvietimų ar įvesties/išvesties operacijų.
Dėl to kitos gorutinos negalės gauti CPU laiko, ir jų vykdymas bus stipriai vėlinamas arba beveik sustos.
Sprendžiant tokią situaciją, reikia arba sumažinti apkrovą šiuose cikluose, pridėti taškus, kur gorutinos kviečia runtime.Gosched() arba atlieka blokuojančias operacijas, arba padidinti GOMAXPROCS, kad būtų suteikta daugiau gijų planuotojui.