我很好奇Go运行时如何在具有截然不同的特性(如Linux,macOS和Windows)的各种平台上确定runtime.NumCPU()
(CPU数量)?
例如在Linux上:我很好奇它是否使用sysfs(/ sys)查看/sys/fs/cgroup/cpu/cpu.cfs_quota_us
之类的路径来确定存在多少CPU或procfs(/proc/cpuinfo
)(这将是在容器环境中容器可以访问的CPU少于此文件中公开的主机CPU数量的CPU值)。
类似地在macOS上,如何确定该值?
我知道某些应用程序(例如JVM)依赖/ sys上公开的cgroup内存信息来设置其内部堆大小等。
答案 0 :(得分:2)
在运行时评估CPU的数量,它取决于操作系统。如果您查看Go运行时包中的内容,将会看到许多文件 与操作系统和架构名称相关的后缀:
构建Go程序时,仅包含与当前OS和体系结构相对应的正确的运行时文件。然后,将通过函数getncpu
来评估CPU的数量。
答案 1 :(得分:1)
转到django.apps
是CPU数量的函数。 CPU的数量取决于处理器体系结构:386,amd64,arm,arm64,mips64,ppc64,s390等。操作系统提供了到硬件接口:Linux,OpenBSD,Mac OS等。在Linux上,我们有GOMAXPROCS
。
请参见SYS_sched_getaffinity
中的Go source code。
请参阅Linux文档命令src/runtime
。