代码之家  ›  专栏  ›  技术社区  ›  ahmet alp balkan

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

  •  1
  • ahmet alp balkan  · 技术社区  · 6 年前

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

    /sys/fs/cgroup/cpu/cpu.cfs_quota_us /proc/cpuinfo )(在容器环境中,这将是错误的值,其中容器访问的CPU数量可能少于此文件中公开的主机CPU数量)。

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

    我知道一些像JVM这样的应用程序依赖于/sys上公开的cgroups内存信息来设置它们的内部堆大小等。

    2 回复  |  直到 6 年前
        1
  •  3
  •   celicoo    6 年前

    CPU的数量是在运行时计算的,它取决于操作系统。如果您查看Go运行时包的内部,您将看到许多带有 与操作系统和体系结构名称相关的后缀:

    构建Go程序时,只包含与当前操作系统和体系结构相对应的正确运行时文件。然后,函数将计算CPU的数量 getncpu .

        2
  •  1
  •   peterSO    6 年前

    GOMAXPROCS SYS_sched_getaffinity .

    看见 Go source code 在里面 src/runtime

    man sched_getaffinity .

    推荐文章