GOMAXPROCS определяет количество потоков ОС (M), которые могут выполнять код Go пользовательского уровня одновременно. Это количество P, доступных планировщику.
-
Влияние:
-
GOMAXPROCS=1: код Go одновременно выполняет только один поток ОС. Имитируется параллелизм, но не настоящий параллелизм.
-
GOMAXPROCS > 1: позволяет коду Go выполняться параллельно в нескольких потоках ОС, используя несколько ядер ЦП. Планировщик попытается сохранить до GOMAXPROCS числа M, занятых выполнением кода Go.
-
Значение по умолчанию: По умолчанию GOMAXPROCS установлено на количество логических процессоров, видимых программе. Обычно это оптимальная настройка для рабочих нагрузок, связанных с ЦП, чтобы максимизировать параллелизм.
-
Когда корректировать:
-
Редко требуется для современного Go: Обычно лучше всего использовать значение по умолчанию.
-
Устранение неполадок/экспериментирование. Вы можете временно настроить его, чтобы понять его влияние на конкретную рабочую нагрузку или диагностировать проблемы, связанные с планированием.
-
Особые контейнерные среды: В некоторых контейнерных средах, где количество сообщаемых ЦП может вводить в заблуждение или ограничения ресурсов строго соблюдаются по-другому, может рассматриваться возможность корректировки GOMAXPROCS, но это происходит редко и должно выполняться осторожно после тщательного тестирования.
-
Устаревший код/библиотеки: Очень редко взаимодействие со старыми библиотеками C через Cgo может потребовать корректировки, но это крайний случай.
Итог
GOMAXPROCS определяет количество потоков ОС (M), которые могут выполнять код Go пользовательского уровня одновременно.