GOMAXPROCS 默认值是多少?

新手上路,请多包涵

不设置同名环境变量的情况下,保证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,但我在这里寻找一些确认。

原文由 mnagel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

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

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


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

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

(强调我的)

原文由 zzzz 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如 Go 1.5 发行说明 所说

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

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

原文由 laike9m 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题