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

如果是,如何确定最大值?这对我来说是最重要的部分。我真的很想手动设置它。我考虑过使用 ,因为我怀疑更多的并行性会产生任何额外的好处。该注释似乎表明,它在某些时候被标记为弃用。runtime.GOMAXPROCS(0)

从我收集到的信息来看,当涉及到围棋例程时,唯一的限制因素是记忆,因为睡眠的围棋例程仍然需要内存来堆叠。


慕标5832272
浏览 65回答 3
3回答

繁星淼淼

这并不是绝对必要的。默认情况下,运行这些 goroutine 的线程数等于计算机上的 CPU 内核数(可通过 进行配置),因此在线程级别不会发生争用。GOMAXPROCS但是,由于内存缓存效应,准备运行的 goroutine 更少,可能会带来性能优势。例如,在 8 核计算机上,如果您有 1000 个活动 goroutine,这些 goroutine 都接触到大量内存,则当一个 goroutine 再次运行时,所需的内存页面可能已经从 CPU 缓存中逐出。使用较少的戈鲁丁,缓存命中的几率更高。与性能问题一样:确定的唯一方法是使用具有代表性的工作负载自己进行测量。

人到中年有点甜

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

慕仙森

goroutines非常轻量级,因此它完全取决于您运行的系统。平均进程在4GB Ram中少于一百万个并发例程应该没有问题。当然,这是否适用于您的目标平台,在不知道该平台是什么的情况下,我们无法回答。看到这篇文章和这个,他们是有用的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go