为了账号安全,请及时绑定邮箱和手机立即绑定

GOMAXPROCS 在不同平台和容器内部是如何确定的?

GOMAXPROCS 在不同平台和容器内部是如何确定的?

Go
米脂 2023-06-01 15:09:17
我很好奇 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


查看完整回答
反对 回复 2023-06-01
?
慕森卡

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


查看完整回答
反对 回复 2023-06-01
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信