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

提供逻辑处理器数量的运行时 api 是什么?

提供逻辑处理器数量的运行时 api 是什么?

Go
手掌心 2022-06-01 16:42:54
下面的 UNIX 命令:$ lscpuArchitecture:        x86_64CPU op-mode(s):      32-bit, 64-bitByte Order:          Little EndianCPU(s):              4On-line CPU(s) list: 0-3Thread(s) per core:  2Core(s) per socket:  2Socket(s):           1显示,  CPU(s):              4  Thread(s) per core:  2这是 4 X 2 = 8 个逻辑处理器。纠正我。下面是另一个 Linux 命令:$ cat /proc/cpuinfoprocessor   : 0....cpu cores   : 2.....processor   : 1.....cpu cores   : 2.....processor   : 2.....cpu cores   : 2.....processor   : 3.....cpu cores   : 2.....$ 但是下面的程序只显示了 4 个逻辑处理器:package mainimport (    "fmt"    "runtime")func main() {    fmt.Println(runtime.GOMAXPROCS(0))   // gives 4    fmt.Println(runtime.NumCPU())        // gives 4   }输出:$ go install github.com/myhub/cs61a$ bin/cs61a 44code$ 更多细节:$ go versiongo version go1.14.1 linux/amd64$ uname -aLinux mohet01-ubuntu 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux文档说,NumCPU 返回当前进程可用的逻辑 CPU 数量。我的理解是,Go 调度程序创建操作系统线程(M),这将等同于逻辑处理器的数量。为什么运行时 api 没有给出 8 的值?
查看完整描述

1 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

根据您上面的所有列表,您有:

  • 每个插槽两个核心

  • 和一个插座

这意味着您只有两个 CPU 内核。但是,您还拥有:

  • 每个核心两个线程

这意味着您的两个 CPU最多可以同时运行四个线程(有一些潜在的缺点,但至少在大多数情况下,这应该比总共使用两个线程提供更多的计算能力)。

由于这是实际的硬件限制,Go 计算要使用的线程数为 4 的事实似乎是正确的。

(我认为您数到八的原因是您假设Linux报告的每个“cpus”都支持两个线程。事实并非如此:只有两个物理内核,但每个都支持两个线程,所以Linux将此报告为四个“cpu”。)


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

添加回答

举报

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