GOMAXPROCS — максимальное число OS-потоков, одновременно выполняющих Go-код. По умолчанию = числу CPU ядер.
import "runtime"
fmt.Println(runtime.GOMAXPROCS(0)) // получить текущее (0 = не менять)
runtime.GOMAXPROCS(4) // установить 4
Или через переменную окружения:
GOMAXPROCS=1 go run main.go # однопоточное выполнение
Это НЕ ограничение числа горутин. 1000 горутин могут работать при GOMAXPROCS=4 — scheduler мультиплексирует их на 4 потока.
Это также НЕ ограничение общего числа OS-потоков. Потоков может быть больше — заблокированные в syscall горутины получают дополнительные потоки.
Когда менять:
- В контейнерах Go может неправильно определить число CPU. Используй
uber-go/automaxprocs:
import _ "go.uber.org/automaxprocs" // автоматически подстраивает под cgroup
GOMAXPROCS=1полезно для профилирования (убирает параллелизм).