Как работает GOMAXPROCS?

Middle
1k просмотров
AFK Offer AI

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 полезно для профилирования (убирает параллелизм).
Следующий вопрос

Как найти элемент в слайсе и map?