network 发表于 2018-9-20 13:12:07

Golang cpu的使用设置

  以下测试,使用的Go版本是1.8.3

不设置
  如果没有调用runtime.GOMAXPROCS 去设置CPU,Golang默认使用所有的cpu核。
  测试机器CPU有4个核,测试代码开启4个goroutine,从测试结果看4个核心全部跑满。
  测试代码如下:
  

package main  

  
func main(){
  go task()
  go task()
  go task()
  go task()
  

  select{}
  

  
}
  

  

  
func task(){
  

  for {
  }
  

  
}
  

设置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.

  设置并发执行时使用的CPU的数目
  例如,设置只使用1个核心
  

runtime.GOMAXPROCS(1)  

  设置只使用2个核心
  

runtime.GOMAXPROCS(2)   

  测试代码如下,只设置一个核心:
  

package main  

  
import (
  "runtime"
  
)
  

  
func main(){
  runtime.GOMAXPROCS(1)
  go task()
  go task()
  go task()
  go task()
  

  select{}
  
}
  

  

  
func task(){
  for {
  }
  
}
  

  有时候,我们常用到:

  runtime.GOMAXPROCS(runtime.NumCPU())

  

func NumCPU() int  
NumCPU returns the number of logical CPUs usable by the current process.
  

  函数返回当前进程可用的逻辑CPU数目
  目前测试下来,使用这个设置CPU,效果和不调用GOMAXPROCS效果一样,就是使用所有的CPU核心数。


页: [1]
查看完整版本: Golang cpu的使用设置