我很好奇Go运行时如何在各种不同特性的平台上(如Linux、macOS和macOS)确定macOS(计数CPU)?
例如,在Linux上:我很好奇它是使用sysfs (/sys)来查看路径(比如/sys/fs/cgroup/cpu/cpu.cfs_quota_us )来确定存在多少CPU,还是使用procfs (/proc/cpuinfo) (在容器环境中,容器访问CPU的权限可能比文件中公开的主机CPU数量少)是错误的。
类似地,在macOS上,这个值是如何确定的?
我知道一些应用程序(如JVM )依赖于在/sys上公开的cgroup内存信息来设置它们的内部堆大小等。
发布于 2019-01-15 01:31:15
Go GOMAXPROCS是CPU数量的函数。CPU的数量是处理器体系结构的一个函数: 386、amd64、arm、arm64、mips64、ppc64、s390等,操作系统为硬件提供了一个接口: Linux、OpenBSD、Mac等。
参见Go源代码 in src/runtime。
请参阅Linux文档命令man sched_getaffinity。
发布于 2019-01-15 02:36:45
CPU的数量是在运行时计算的,并且与操作系统有关。如果您查看Go运行时包中的内容,您将看到许多带有与OS和体系结构名称相关的后缀的文件:
构建Go程序时,只包含与当前操作系统和体系结构相对应的正确的运行时文件。然后,CPU的数量将由函数getncpu计算。
https://stackoverflow.com/questions/54191055
复制相似问题