什么是GOMAXPROCS默认值

mna*_*gel 32 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())
}
Run Code Online (Sandbox Code Playgroud)

并像这样运行:

$ GOMAXPROCS= go run max.go 
GOMAXPROCS is 1
Run Code Online (Sandbox Code Playgroud)

显示在这种情况下它是1,但我在这里寻找一些确认.

lai*_*e9m 34

作为围棋1.5发行说明

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

所以从Go 1.5开始,默认值应该是核心数.

  • 如果GOMAXPROCS>内核数会发生什么 (2认同)
  • 您最终可能会获得更高的CPU负载(任务争夺CPU时间)。 (2认同)

zzz*_*zzz 29

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

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


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

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

(强调我的)

  • 从Go 1.5开始,这个答案已经过时了.请参阅laike9m对当前正确答案的回答. (4认同)
  • GOMAXPROCS最早应该在Go 2.0之前消失,否则它将破坏Go 1保证:不会进行API更改,破坏构建或更改标准库行为,除非它是一个bug修复.由于GOMAXPROCS有点奇怪并直接影响运行时它可能会成为一个建议而不是一个命令,但它不会在Go 1.2或其他任何东西中突然消失. (3认同)

Kha*_*han 8

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

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

  • 请注意,这(目前)只是一个提案,即使被接受,如果出现无法预料的问题,默认设置也可能会恢复为1. (3认同)