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 возвращает количество логических процессоров на локальном компьютере."