Сценарий: на 16-ядерном узле служба / контейнер Go запускается в модуле вместе с другим, где другому назначается 4 рабочих, а для контейнера go установлено использование GOMAXPROCS
.
В запросах, использующих goroutines, программа Go будет использовать все доступные ей ЦП. Я думаю, что это зависит от GOMAXPROCS
, но я не уверен, что он видит только 1 ядро, используемое при запуске pod, все на машине. все доступные процессоры, но мне трудно измерить, что на самом деле происходит во время выполнения (GKE).
kube top
показывает, что ожидается в режиме ожидания:
POD NAME CPU(cores) MEMORY(bytes)
pod-go-py go-service 1m 862Mi
pod-go-py py-service 4m 489Mi
fmt.Println(runtime.NumCPU())
показывает 16 ядро доступно. Так что я могу верить, что программа Go будет использовать их все в запросах? Я также представляю, как я масштабирую стручки на узле, что я должен помнить о дросселировании.