當沒有設置相同名稱的環境變量時,保證GOMAXPROCS被設置爲1?什麼是GOMAXPROCS默認值
這段代碼顯示的值:
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,但我在這裏尋找一些確認。
GOMAXPROCS不應該一直走到Go 2.0,否則它會打破Go 1的保證:除非是錯誤修正,否則不會改變API構建或更改標準庫行爲。由於GOMAXPROCS有點奇怪並直接影響運行時,它可能會成爲一個建議,而不是一個命令,但它不會在Go 1.2中突然消失或任何東西。 – LinearZoetrope
@Jsor如果GOMAXPROCS要改變某些東西的行爲,那聽起來就像是一個bug? – inf
@inf它不會是一個錯誤,因爲它不影響語言的語義(即最終結果)。唯一可以影響語義的是如果你玩的是未定義的/非法的行爲,比如比賽條件。想想GOMAXPROCS就像C++中的'inline'指令一樣,編譯器可以忽略它,因爲它有時比你知道的更好,但它也不會影響最終的結果,除非你做了很奇怪的事情。 GOMAXPROCS是一個運行時指令,但同樣適用(雖然有些事情需要考慮OpenGL)。 – LinearZoetrope