Golang Go语言中 runtime.GOMAXPROCS 的设置问题
老哥们,我把代码中的 runtime.GOMAXPROCS(1)
注释掉了,可是程序运行下来的时间根本没减少,这是为什么?
真是百思不得骑呐
package main
import (
“fmt”
“time”
“runtime”
)
var quit chan int = make(chan int)
func loop() {
for i := 0; i < 10000; i++ {
fmt.Printf("%d\n ", i)
}
quit <- 0
}
func main() {
fmt.Println(runtime.NumCPU())
time.Sleep(time.Second)
a := 500
t1 := time.Now()
runtime.GOMAXPROCS(1) //单核跑和把这句话注释吊(使用默认 CPU 个数)跑下来时间没差,这是为什么?
for i := 1; i <= a; i++ {
go loop()
}
for i := 0; i < a; i++ {
<-quit
}
elapsed := time.Since(t1)
fmt.Println("运行时间:", elapsed)
}
// 下面是 GOMAXPROCS 的说明
// GOMAXPROCS sets the maximum number of CPUs that can be executing
// simultaneously and returns the previous setting. If n < 1, it does not
// change the current setting.
// The number of logical CPUs on the local machine can be queried with NumCPU.
// This call will go away when the scheduler improves.
Golang Go语言中 runtime.GOMAXPROCS 的设置问题
更多关于Golang Go语言中 runtime.GOMAXPROCS 的设置问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
计算太短了,尝试 a 大一点看看.多测试几次做对比
更多关于Golang Go语言中 runtime.GOMAXPROCS 的设置问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
#1 我把 a 改成了 5000, 发现使用默认 CPU(4 个)要比使用使用 1 个 CPU 要慢 16s. ???哇!这也太恐怖啦吧
,h4lbhg1G ,ysc3839 .强行艾特
多核不一定会快,要看你程序到底能不能并行,
你这里用了一个 channel,瓶颈就在这里,放在多核上跑反而会变慢
建议看一下 rob pike 的 Concurrency is not parallelism http://talks.golang.org/2012/waza.slide
#3 你找错人了吧?我不懂 Golang。
stdout 只有一个,并发访问同一资源产生了数据竞争,大部分时间都花在了同步锁上。
感谢 2 位大大,十分感谢!
在Go语言中,runtime.GOMAXPROCS
函数用于设置程序同时运行的逻辑处理器(goroutines)的数量。这个设置对于优化并发程序的性能至关重要。
默认情况下,runtime.GOMAXPROCS
的值被设置为宿主机的CPU核心数。这意味着如果你的机器有4个CPU核心,Go程序会尝试同时使用这4个核心来运行goroutines。
然而,在某些情况下,你可能需要手动调整这个值。例如,如果你的程序包含大量I/O操作,增加GOMAXPROCS
的值可能会提高性能,因为更多的goroutines可以并行执行I/O等待操作。相反,如果程序主要是计算密集型,且goroutines之间存在大量的同步等待,增加GOMAXPROCS
可能不会带来性能提升,反而可能因上下文切换导致性能下降。
设置runtime.GOMAXPROCS
的示例代码如下:
package main
import (
"fmt"
"runtime"
)
func main() {
// 设置最大处理器数为8
runtime.GOMAXPROCS(8)
fmt.Println("GOMAXPROCS set to:", runtime.GOMAXPROCS(0))
}
注意,runtime.GOMAXPROCS(0)
会返回当前的GOMAXPROCS
设置值,而不是修改它。
总之,合理设置runtime.GOMAXPROCS
值对于充分利用多核CPU资源、优化Go程序的并发性能具有重要意义。但在调整时,需根据程序的具体特点进行权衡和测试。