什么是GOMAXPROCS默认值

时间:2013-07-25 09:16:44

标签: runtime go

当未设置相同名称的环境变量时,是否可以保证GOMAXPROCS设置为1?

此代码显示值:

package main

import (
    "runtime"
    "fmt"
)

func getGOMAXPROCS() int {
    return runtime.GOMAXPROCS(0)
}

func main() {
    fmt.Printf("GOMAXPROCS is %d\n", getGOMAXPROCS())
}

并像这样运行:

$ GOMAXPROCS= go run max.go 
GOMAXPROCS is 1

表明在这种情况下它是1,但我在这里寻找一些确认。

3 个答案:

答案 0 :(得分:31)

正如Go 1.5 Release Notes所说

  

默认情况下,Go程序在GOMAXPROCS设置为可用核心数的情况下运行;在之前的版本中,它默认为1。

从Go 1.5开始,默认值应为核心数

答案 1 :(得分:23)

更新2018年: 默认情况下,Go程序在GOMAXPROCS设置为可用核心数的情况下运行;在之前的版本中,它默认为1。

从Go 1.5开始,默认值是核心数。 如果您在较新的Go版本中对此不满意,则只需要明确设置它。


不,不能保证默认值是什么;即使所有已知的实现都使用值'1'。如果您的代码在没有环境变量的情况下需要特定的默认值,那么您应该在代码中设置它。 Additionally

  

GOMAXPROCS设置可以同时执行的最大CPU数并返回先前的设置。如果n < 1,它不会改变当前设置。可以使用NumCPU查询本地计算机上的逻辑CPU数。 当调度程序改进时,此调用将消失。

(强调我的)

答案 2 :(得分:8)

从Go 1.5开始,GOMAXPROCS默认设置为可用的CPU数。但是,您可以使用GOMAXPROCS环境变量或通过调用runtime.GOMAXPROCS显式设置它。

https://docs.google.com/document/d/1At2Ls5_fhJQ59kDK2DFVhFu3g5mATSXqqV5QrxinasI/preview?sle=true