Ist garantiert, dass GOMAXPROCS auf 1 festgelegt wird, wenn die Umgebungsvariable mit demselben Namen nicht festgelegt ist?Wie lautet der GOMAXPROCS-Standardwert
Dieser Code zeigt den Wert:
package main
import (
"runtime"
"fmt"
)
func getGOMAXPROCS() int {
return runtime.GOMAXPROCS(0)
}
func main() {
fmt.Printf("GOMAXPROCS is %d\n", getGOMAXPROCS())
}
und es wie folgt ausgeführt werden:
$ GOMAXPROCS= go run max.go
GOMAXPROCS is 1
zeigt, dass es in diesem Fall 1 ist, aber ich bin für einige Bestätigung hier suchen.
GOMAXPROCS sollte frühestens Go 2.0 verlassen, sonst würde es die Go 1-Garantie brechen: dass keine API-Änderungen vorgenommen werden, die Builds erstellen oder das Standard-Bibliotheksverhalten verändern, es sei denn, es handelt sich um einen Bugfix. Da GOMAXPROCS ein wenig merkwürdig ist und die Laufzeit direkt beeinflusst, kann es sich eher um einen Vorschlag als um einen Befehl handeln, aber es wird nicht plötzlich in Go 1.2 oder irgendetwas verschwinden. – LinearZoetrope
@Jsor Wenn GOMAXPROCS das Verhalten von etwas ändern sollte, würde es für mich wie ein Fehler klingen? – inf
@inf Es wäre kein Bug, weil es die Semantik der Sprache (das Endergebnis) nicht beeinflusst. Das einzige Mal, dass es die Semantik beeinflussen kann, ist es, wenn Sie mit undefiniertem/illegalem Verhalten spielen, wie zum Beispiel Rassenbedingungen. Denken Sie an GOMAXPROCS wie "Inline" -Direktiven in C++, der Compiler darf es ignorieren, weil es manchmal besser als Sie weiß, aber es beeinflusst auch nicht das Endergebnis, es sei denn, Sie machen wirklich seltsame Dinge. GOMAXPROCS ist eine Laufzeit-Direktive, aber das selbe gilt (obwohl Dinge wie OpenGL zu beachten sind). – LinearZoetrope