我很好奇 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条经验 获得超7个赞
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 关注
- 150 浏览
添加回答
举报
0/150
提交
取消