我很好奇 Go 运行时如何确定 runtime.NumCPU()
(CPU 数)在具有截然不同特性的各种平台(如 Linux、macOS 和 Windows)上?
例如在 Linux 上:我很好奇它是否使用 sysfs (/sys) 来查看像 /sys/fs/cgroup/cpu/cpu.cfs_quota_us
这样的路径以确定存在多少个 CPU , 或 procfs (/proc/cpuinfo
)(在容器环境中,这将是错误的值,在容器环境中,容器访问的 CPU 数量可能少于此文件中公开的主机 CPU 数量)。
macOS 上类似,这个值是怎么确定的?
我知道像 JVM 这样的一些应用程序依赖于暴露在/sys 上的 cgroups 内存信息来设置它们的内部堆大小等。
最佳答案
CPU 的数量是在运行时评估的,它取决于操作系统。如果你看一下 Go 运行时包,你会看到很多文件 与操作系统和架构名称相关的后缀:
构建 Go 程序时,只会包含与当前操作系统和体系结构相对应的正确运行时文件。然后,函数 getncpu
将评估 CPU 的数量。
关于docker - GOMAXPROCS 在不同平台和容器内部是如何确定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54191055/