Мне любопытно, как среда выполнения Go определяет runtime.NumCPU()
(количество процессоров) на различных платформах с совершенно разными характеристиками, такими как Linux, macOS и Windows?
Например, для Linux: мне любопытно, использует ли он sysfs (/ sys) для просмотра путей типа /sys/fs/cgroup/cpu/cpu.cfs_quota_us
, чтобы определить, сколько процессоров существует, или procfs (/proc/cpuinfo
) (это неправильное значение в среда контейнера, в которой контейнер может иметь доступ к меньшему количеству процессоров, чем число процессоров хоста, указанное в этом файле).
Аналогично в macOS, как определяется это значение?
Я знаю, что некоторые приложения, такие как JVM, полагаются на информацию о памяти cgroups, предоставляемую в / sys, для установки размера внутренней кучи и т. Д.