zoukankan      html  css  js  c++  java
  • Golang cpu的使用设置--GOMAXPROCS

    以下测试,使用的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核心数。

    2020.1.1 补充更新

    最新测试结果:

    测试机器:MAC CPU 8核
    版本:go version go1.13 darwin/amd64

    1.不使用GOMAXPROCS 设置CPU
    8 个goroutine,可以跑满8个核, CPU使用最高达到800%

    2.使用GOMAXPROCS 设置CPU
    8 个goroutine
    - 设置只使用1个核, CPU使用最高达到100%
    - 设置只使用2个核,CPU使用最高达到200%

    也就是说GOMAXPROCS可以用来设置程序使用的最多CPU核数。

  • 相关阅读:
    python-study-08
    第一周代码整理
    python-study-阶段总结
    python-study-07
    二分查找数组中与目标数字(可以是浮点型)最近的数的位置
    寻找最大数
    零件分组(stick)
    走迷宫
    自然数的拆分问题 字典序
    素数环(回溯)
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/9235262.html
Copyright © 2011-2022 走看看