为了账号安全,请及时绑定邮箱和手机立即绑定

在完全受 CPU 限制的工作负载中限制 go 例程的数量是否必要?

在完全受 CPU 限制的工作负载中限制 go 例程的数量是否必要?

Go
慕标5832272 2022-09-26 19:45:46
如果是,如何确定最大值?这对我来说是最重要的部分。我真的很想手动设置它。我考虑过使用 ,因为我怀疑更多的并行性会产生任何额外的好处。该注释似乎表明,它在某些时候被标记为弃用。runtime.GOMAXPROCS(0)从我收集到的信息来看,当涉及到围棋例程时,唯一的限制因素是记忆,因为睡眠的围棋例程仍然需要内存来堆叠。
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

这并不是绝对必要的。默认情况下,运行这些 goroutine 的线程数等于计算机上的 CPU 内核数(可通过 进行配置),因此在线程级别不会发生争用。GOMAXPROCS

但是,由于内存缓存效应,准备运行的 goroutine 更少,可能会带来性能优势。例如,在 8 核计算机上,如果您有 1000 个活动 goroutine,这些 goroutine 都接触到大量内存,则当一个 goroutine 再次运行时,所需的内存页面可能已经从 CPU 缓存中逐出。使用较少的戈鲁丁,缓存命中的几率更高。

与性能问题一样:确定的唯一方法是使用具有代表性的工作负载自己进行测量。


查看完整回答
反对 回复 2022-09-26
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

在我们的测试中,我们确定最好生成固定数量的 worker 例程,并使用这些例程来执行所有工作。戈鲁丁的创建和破坏是轻量级的,但并非完全没有开销。如果戈鲁廷花费任何时间阻塞,则该开销通常微不足道。


查看完整回答
反对 回复 2022-09-26
?
慕仙森

TA贡献1827条经验 获得超8个赞

goroutines非常轻量级,因此它完全取决于您运行的系统。平均进程在4GB Ram中少于一百万个并发例程应该没有问题。当然,这是否适用于您的目标平台,在不知道该平台是什么的情况下,我们无法回答。

看到这篇文章这个,他们是有用的


查看完整回答
反对 回复 2022-09-26
  • 3 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号