我意识到我的第一个Golang
应用程序,我有使用GoRoutines
,我真的不知道为什么在使用MAX CPU & Cores
一些问题。够程不使用最大CPU和核心
当使用工具如htop
,CPU
不是在其最大功率使用,并且仅1..4 threads
处于活动状态的时间。此外,所有cores
都处于活动状态,但它们的使用率大约为25%-40%
。
我用:
func MaxParallelism() int {
maxProcs := runtime.GOMAXPROCS(0)
numCPU := runtime.NumCPU()
if maxProcs < numCPU {
return maxProcs
}
return numCPU
}
为了获得goroutines
数被实例化。
下面是我如何设置应用程序:
//Common Channel for the goroutines
tasks := make(chan *exec.Cmd, 64)
//Spawning Max Cores Number goroutines (8)
var wg sync.WaitGroup
cores := MaxParallelism()
for i := 0; i < cores; i++ {
wg.Add(1)
go func(num int, w *sync.WaitGroup) {
defer w.Done()
var (
out []byte
err error
)
for cmd := range tasks {
out, err = cmd.Output()
if err != nil {
fmt.Printf("Can't get stdout:", err)
}
. . .
}
}(i, &wg)
}
//Generate Tasks
for i := 0; i < 100000; i++ {
tasks <- exec.Command(cmd1, args...)
tasks <- exec.Command(cmd2, args...)
}
close(tasks)
// wait for the workers to finish
wg.Wait()
我分享htop
两张截图在执行应用程序
我不知道如果它可以帮助,但我通过Intellij Idea
启动它。
如何正确使用Max CPU和Cores?
在此先感谢。
是什么让你觉得它没有使用足够的CPU核心?你期望什么行为,你观察到什么行为? – Flimzy
我在执行应用程序时共享一个'htop'屏幕,这样你就能理解它。基本上,一次只有'1个活动线程,所有内核的使用率都在25%左右。 – AndreaM16
你说你正在产卵4套房屋。你怎么知道你得到4? – user2357112