Подтвердить что ты не робот

Что такое значение 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, но я ищу подтверждение здесь.

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ 2018: по умолчанию программы Go запускаются с GOMAXPROCS, для которого установлено число доступных ядер; в предыдущих выпусках по умолчанию 1.

Начиная с Go 1.5, значением по умолчанию является количество ядер. Вам нужно только явно установить его, если вы не согласны с этим в новых версиях Go.


Нет, нет никаких гарантий о том, что по умолчанию; хотя все известные реализации используют значение "1". Если ваш код, при отсутствии переменной окружения, требует определенного значения по умолчанию, вы должны установить его в коде. Дополнительно:

GOMAXPROCS устанавливает максимальное количество процессоров, которые могут выполняться одновременно, и возвращает предыдущую настройку. Если n <1, это не меняет текущую настройку. Количество логических процессоров на локальной машине можно узнать с помощью NumCPU. Этот вызов исчезнет, когда улучшится планировщик.

(Акцент мой)

Ответ 2

Как Замечания о выпуске Go 1.5 говорит

По умолчанию программы Go работают с GOMAXPROCS, установленными на количество доступных ядер; в предыдущих выпусках он по умолчанию был равен 1.

Итак, начиная с Go 1.5, значением по умолчанию должно быть количество ядер.