13

我是 Google Go(Golang)的新手。我的问题与这篇文章有关runtime.Gosched 到底做了什么?. 代码结构复制如下。我的问题是,当我更改 GOMAXPROCS 中的处理器数量时,我如何验证它正在运行多少个处理器。当我执行“top”时,它会显示 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()
}
4

2 回答 2

34

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

func MaxParallelism() int {
    maxProcs := runtime.GOMAXPROCS(0)
    numCPU := runtime.NumCPU()
    if maxProcs < numCPU {
        return maxProcs
    }
    return numCPU
}
于 2012-11-06T05:40:00.167 回答
2

内核数可以通过http://golang.org/pkg/runtime/#NumCPU查询。

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

于 2012-11-05T15:29:18.517 回答