Golang: как проверить количество процессоров, на которых запущена программа Go
Я новичок в Google Go (Golang). Мой вопрос связан с этим сообщением что именно делает среда выполнения.Госчед до?. Структура кода копируется ниже. Мой вопрос в том, что когда я изменяю количество процессоров в GOMAXPROCS, как проверить, сколько процессоров он работает. Когда я делаю "top", он показывает a.вне процесс который уничтожает 100% или меньше ресурсов даже когда GOMAXPROCS больше чем 1. Я был бы благодарен вам за помощь.
package main
import (
"fmt"
"runtime"
"sync"
)
var wg sync.WaitGroup
func doTasks() {
fmt.Println(" Doing task ")
for ji := 1; ji < 100000000; ji++ {
for io := 1; io < 10; io++ {
//Some computations
}
}
runtime.Gosched()
wg.Done()
}
func main() {
wg.Add(1)
runtime.GOMAXPROCS(1) // or 2 or 4
go doTasks()
doTasks()
wg.Wait()
}
2 ответов
наибольшее количество логических процессоров процесс может быть запущен в данный момент времени не более чем минимум runtime.GOMAXPROCS(0)
и runtime.NumCPU()
.
func MaxParallelism() int {
maxProcs := runtime.GOMAXPROCS(0)
numCPU := runtime.NumCPU()
if maxProcs < numCPU {
return maxProcs
}
return numCPU
}
количество ядер может быть запрошено http://golang.org/pkg/runtime/#NumCPU.
в документации говорится: "NumCPU возвращает количество логических процессоров на локальном компьютере."