我很好奇 Go 運行時如何runtime.NumCPU()在具有截然不同特性的各種平臺(如 Linux、macOS 和 Windows)上確定(CPU 數量)?例如在 Linux 上:我很好奇它是否使用 sysfs (/sys) 查看路徑以/sys/fs/cgroup/cpu/cpu.cfs_quota_us確定存在多少 CPU,或 procfs ( /proc/cpuinfo)(這在容器可能有權訪問的容器環境中是錯誤的值CPU 數量少于此文件中公開的主機 CPU 數量)。同樣在 macOS 上,這個值是如何確定的?我知道像 JVM 這樣的一些應用程序依賴于暴露在 /sys 上的 cgroups 內存信息來設置它們的內部堆大小等。
2 回答

largeQ
TA貢獻2039條經驗 獲得超8個贊
CPU 的數量是在運行時評估的,它取決于操作系統。如果你查看 Go 運行時包,你會看到許多帶有與操作系統和體系結構名稱相關的后綴的文件:
FreeBSD
達爾文
計劃9
打開BSD
Linux
谷歌原生客戶端
視窗
NetBSD
索拉里斯
蜻蜓 BSD
構建 Go 程序時,只會包含與當前操作系統和體系結構相對應的正確運行時文件。CPU 的數量將由函數計算getncpu
。

慕森卡
TA貢獻1806條經驗 獲得超8個贊
GoGOMAXPROCS
是 CPU 數量的函數。CPU 的數量是處理器架構的函數:386、amd64、arm、arm64、mips64、ppc64、s390 等,操作系統提供與硬件的接口:Linux、OpenBSD、Mac OS 等。在 Linux 上,我們有SYS_sched_getaffinity
。
請參閱中的Go 源代碼src/runtime
。
請參閱 Linux 文檔命令man sched_getaffinity
。
- 2 回答
- 0 關注
- 207 瀏覽
添加回答
舉報
0/150
提交
取消