Ниже 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 возвращает количество логических процессоров, используемых текущим процессом.
Насколько я понимаю,
Go планировщик создает потоки ОС (M
), которые будут быть эквивалентным количеству логических процессоров.
Почему runtime api не выдает значение 8?