• 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核数。

  • 相关阅读:
    编程思想之正则表达式
    SQL查询顺序
    hibernate inverse属性的作用
    介绍一下Hibernate的二级缓存
    JSON数据
    你没玩过的全新版本!Win10这些骚操作你知多少
    VSCode 小鸡汤 第01期
    Editor REST Client
    k8s常用命令
    【项目3-2】多肉植物网站
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/9235262.html
Copyright © 2020-2023  润新知