Что такое значение 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, но я ищу подтверждение здесь.
Ответы
Ответ 1
ОБНОВЛЕНИЕ 2018: по умолчанию программы Go запускаются с GOMAXPROCS, для которого установлено число доступных ядер; в предыдущих выпусках по умолчанию 1.
Начиная с Go 1.5, значением по умолчанию является количество ядер. Вам нужно только явно установить его, если вы не согласны с этим в новых версиях Go.
Нет, нет никаких гарантий о том, что по умолчанию; хотя все известные реализации используют значение "1". Если ваш код, при отсутствии переменной окружения, требует определенного значения по умолчанию, вы должны установить его в коде. Дополнительно:
GOMAXPROCS устанавливает максимальное количество процессоров, которые могут выполняться одновременно, и возвращает предыдущую настройку. Если n <1, это не меняет текущую настройку. Количество логических процессоров на локальной машине можно узнать с помощью NumCPU. Этот вызов исчезнет, когда улучшится планировщик.
(Акцент мой)
Ответ 2
Как Замечания о выпуске Go 1.5 говорит
По умолчанию программы Go работают с GOMAXPROCS, установленными на количество доступных ядер; в предыдущих выпусках он по умолчанию был равен 1.
Итак, начиная с Go 1.5, значением по умолчанию должно быть количество ядер.
Ответ 3
Начиная с Go 1.5, GOMAXPROCS устанавливается на количество доступных по умолчанию процессоров. Однако вы можете явно установить его с помощью переменной среды GOMAXPROCS или вызовом runtime.GOMAXPROCS.
https://docs.google.com/document/d/1At2Ls5_fhJQ59kDK2DFVhFu3g5mATSXqqV5QrxinasI/preview?sle=true