我很好奇Go运行时如何在Linux,macOS和Windows等具有截然不同的特性的各种平台上确定runtime.NumCPU()(CPU数量)?

例如在Linux上:我很好奇它是否使用sysfs(/sys)查看/sys/fs/cgroup/cpu/cpu.cfs_quota_us之类的路径来确定存在多少CPU或procfs(/proc/cpuinfo)(这在容器可能具有容器的容器环境中是错误的值访问的CPU数少于此文件中公开的主机CPU数)。

同样在macOS上,如何确定该值?

我知道某些应用程序(例如JVM)依赖/sys上公开的cgroup内存信息来设置其内部堆大小等。

最佳答案

Go GOMAXPROCS是CPU数量的函数。 CPU的数量是处理器架构的函数:386,amd64,arm,arm64,mips64,ppc64,s390等。操作系统提供了到硬件接口(interface):Linux,OpenBSD,Mac OS等。在Linux上,我们有SYS_sched_getaffinity

参见src/runtime中的Go source code

请参阅Linux文档命令man sched_getaffinity

关于docker - 如何在不同平台和容器内确定GOMAXPROCS?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54191055/

10-16 16:17