一尘不染

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

go

我是(Golang)的新手。我的问题与这篇文章有关。runtime.Gosched到底做什么?。代码的结构如下所示。我的问题是,当我更改GOMAXPROCS中的处理器数量时,如何验证它正在运行多少个处理器。当我执行“top”操作时,即使GOMAXPROCS大于1,它也会显示a.out进程占用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()
}

阅读 184

收藏
2020-07-02

共1个答案

一尘不染

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

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