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

use*_*260 12 parallel-processing go

我是Google Go(Golang)的新手.我的问题与这篇文章有关.status.Gosched究竟做了什么?.代码结构如下所示.我的问题是,当我更改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()
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*ner 29

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

func MaxParallelism() int {
    maxProcs := runtime.GOMAXPROCS(0)
    numCPU := runtime.NumCPU()
    if maxProcs < numCPU {
        return maxProcs
    }
    return numCPU
}
Run Code Online (Sandbox Code Playgroud)