如果GOMAXPROCS太大,该怎么办?

Yi Zheng :

我们都知道runtime.GOMAXPROCS默认情况下其设置为CPU内核号,如果此属性设置得太大怎么办?

  1. 程序会有更多上下文切换吗?
  2. 垃圾收集器会更频繁地触发吗?
icza:

GOMAXPROCS 由于以下原因,默认情况下将设置为可用逻辑CPU的数量:在大多数情况下,这可提供最佳性能。

GOMAXPROCS仅限制“活动”线程的数量,如果某个线程的goroutine被阻塞(例如,通过syscall),则可能会启动一个新线程。没有直接关联,请参见Go runtime所使用的线程数

如果GOMAXPROCS大于可用CPU的数量,则活动线程将比CPU核更多,这意味着必须将活动线程“多路复用”到可用处理单元,因此,是的,如果更多的上下文开关,则将更多的上下文切换。活动线程比核心线程多,这不是必然的情况。

垃圾回收与线程数没有直接关系,因此您不必为此担心。从包装报价runtime

GOGC变量设置初始垃圾回收目标百分比。当新分配的数据与上一个收集之后剩余的实时数据之比达到此百分比时,将触发收集。默认值为GOGC = 100。设置GOGC = off将完全禁用垃圾收集器。运行时/调试包的SetGCPercent函数允许在运行时更改此百分比。请参阅https://golang.org/pkg/runtime/debug/#SetGCPercent

如果您有更多不分配/释放内存的线程,那不应影响触发集合的频率。

设置GOMAXPROCS高于CPU的数量可能会提高应用程序的性能,但这种情况很少见。进行测量以找出是否对您有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章