gpt4 book ai didi

go - 在 golang 中,我的 go 例程使用了所有内核,但每个内核只使用了 50% 到 75%

转载 作者:数据小太阳 更新时间:2023-10-29 03:35:39 25 4
gpt4 key购买 nike

我使用的是go语言的go1.5.3 linux/amd64版本。我有一个执行需要一些时间的数学运算的例程。每个 go routine 独立行动,不必阻塞。

我的系统有 12 个核心。如果我生成 12 个 go 例程,它只需要所有内核的平均使用率高达 31%。如果我使用 24 个 go 例程,它会使所有内核的平均使用率达到 49%。如果我使用 240,我得到 77%。 2400 给了我 76%。

显然,rand.Intn(j) 操作正在减慢它的速度。没有它,内核将以 100% 的速度运行。

func DoSomeMath() int {
k := 0
for i := 0; i < 1000; i++ {
j := i*i + 2
k += i * rand.Intn(j)
}
return k
}

如何让程序在使用 RNG 时 100% 使用所有内核?

最佳答案

主要原因是,全局rand.* 使用互斥锁,因此在任何给定点,您一次只能生成一个随机数。

@peterSO 的答案有效的原因是因为现在没有互斥体,每个例程有 1 个生成器,但是如果 2 个或更多 goroutines 在精确的纳秒开始,你可能会以重复状态结束,尽管不太可能。

here看看全局兰特是如何运作的。

关于go - 在 golang 中,我的 go 例程使用了所有内核,但每个内核只使用了 50% 到 75%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35384033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com