Golang:如何验证运行Go程序的处理器数量

时间:2012-11-05 15:03:42

标签: parallel-processing go

我是Google Go(Golang)的新手。我的问题与此帖What exactly does runtime.Gosched do?有关。代码结构如下所示。我的问题是,当我更改GOMAXPROCS中的处理器数量时,如何验证它运行的处理器数量。当我做'顶'时,它显示a.out过程,即使GOMAXPROCS超过1,也会消耗100%或更少的资源。我将非常感谢你的帮助。

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 个答案:

答案 0 :(得分:25)

在给定时间,进程可以运行的最大逻辑CPU数量不会超过runtime.GOMAXPROCS(0)runtime.NumCPU()的最小值。

func MaxParallelism() int {
    maxProcs := runtime.GOMAXPROCS(0)
    numCPU := runtime.NumCPU()
    if maxProcs < numCPU {
        return maxProcs
    }
    return numCPU
}

答案 1 :(得分:2)

http://golang.org/pkg/runtime/#NumCPU可以查询核心数量。

文档说:“NumCPU返回本地计算机上的逻辑CPU数量。”