13

Google Go (Golang) は初めてです。私の質問は、この投稿に関連しています。runtime.Gosched は何をしますか? . コードの構造は以下のとおりです。私の質問は、GOMAXPROCS でプロセッサの数を変更するときに、それが実行されているプロセッサの数を確認するにはどうすればよいかということです。top すると GOMAXPROCS が 1 より大きくても 100% 以下のリソースを消費する a.out プロセスが表示されます。

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

runtime.GOMAXPROCS(0)特定の時間にプロセスを実行できる論理 CPU の最大数は、との最小値を超えません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 に答える