下面由golang教程欄目給大家詳解Golang cpu的使用設(shè)置,希望對(duì)需要的朋友有所幫助!
以下測(cè)試,使用的Go版本是1.8.3
不設(shè)置
如果沒(méi)有調(diào)用runtime.GOMAXPROCS 去設(shè)置CPU,Golang默認(rèn)使用所有的cpu核。
測(cè)試機(jī)器CPU有4個(gè)核,測(cè)試代碼開啟4個(gè)goroutine,從測(cè)試結(jié)果看4個(gè)核心全部跑滿。
測(cè)試代碼如下:
package main func main() { go task() go task() go task() go task() select{} } func task(){ for { } }
設(shè)置CPU使用
func GOMAXPROCS(n int) int
GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously and returns the previous setting. If n < 1, it does not change the current setting.
設(shè)置并發(fā)執(zhí)行時(shí)使用的CPU的數(shù)目
例如,設(shè)置只使用1個(gè)核心
runtime.GOMAXPROCS(1)
設(shè)置只使用2個(gè)核心
runtime.GOMAXPROCS(2)
測(cè)試代碼如下,只設(shè)置一個(gè)核心:
package main import ( "runtime" ) func main() { runtime.GOMAXPROCS(1) go task() go task() go task() go task() select{} } func task(){ for { } }
有時(shí)候,我們常用到:
runtime.GOMAXPROCS(runtime.NumCPU())
func NumCPU() int NumCPU returns the number of logical CPUs usable by the current process.
函數(shù)返回當(dāng)前進(jìn)程可用的邏輯CPU數(shù)目
目前測(cè)試下來(lái),使用這個(gè)設(shè)置CPU,效果和不調(diào)用GOMAXPROCS效果一樣,就是使用所有的CPU核心數(shù)。
2020.1.1 補(bǔ)充更新
最新測(cè)試結(jié)果:
測(cè)試機(jī)器:MAC CPU 8核
版本:go version go1.13 darwin/amd64
1.不使用GOMAXPROCS 設(shè)置CPU
8 個(gè)goroutine,可以跑滿8個(gè)核, CPU使用最高達(dá)到800%
2.使用GOMAXPROCS 設(shè)置CPU
8 個(gè)goroutine
– 設(shè)置只使用1個(gè)核, CPU使用最高達(dá)到100%
– 設(shè)置只使用2個(gè)核,CPU使用最高達(dá)到200%
也就是說(shuō)GOMAXPROCS可以用來(lái)設(shè)置程序使用的最多CPU核數(shù)。