下面的 UNIX 命令:
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
显示,
CPU(s): 4
Thread(s) per core: 2
这是 4 X 2 = 8 个逻辑处理器。纠正我。
下面是另一个 Linux 命令:
$ cat /proc/cpuinfo
processor : 0
....
cpu cores : 2
.....
processor : 1
.....
cpu cores : 2
.....
processor : 2
.....
cpu cores : 2
.....
processor : 3
.....
cpu cores : 2
.....
$
但是下面的程序只显示了 4 个逻辑处理器:
package main
import (
"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
4
4
code$
更多细节:
$ go version
go version go1.14.1 linux/amd64
$ uname -a
Linux 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 的值?
侃侃无极
相关分类