50

同じ名前の環境変数が設定されていない場合、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 であることが示されていますが、ここで確認を求めています。

4

3 に答える 3

58

UPDATE 2018: デフォルトでは、Go プログラムは GOMAXPROCS を使用可能なコア数に設定して実行されます。以前のリリースでは、デフォルトで 1 に設定されていました。

Go 1.5 以降、デフォルト値はコア数です。新しい Go バージョンでこれを使用できない場合にのみ、明示的に設定する必要があります。


いいえ、デフォルトが何であるかについての保証はありません。既知の実装はすべて値「1」を使用していますが。環境変数がないコードで特定のデフォルト値が必要な場合は、コードで設定する必要があります。さらに:

GOMAXPROCS は、同時に実行できる CPU の最大数を設定し、以前の設定を返します。n < 1 の場合、現在の設定は変更されません。ローカル マシン上の論理 CPU の数は、NumCPU で照会できます。この呼び出しは、スケジューラが改善されるとなくなります。

(私のものを強調)

于 2013-07-25T09:22:48.137 に答える
10

Go 1.5 から、GOMAXPROCS はデフォルトで使用可能な CPU の数に設定されます。ただし、GOMAXPROCS 環境変数を使用するか、runtime.GOMAXPROCS を呼び出して明示的に設定できます。

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

于 2015-05-28T21:40:14.027 に答える