Sobes.tech
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.