我们都知道runtime.GOMAXPROCS
默认情况下将其设置为CPU内核号,如果此属性设置得太大怎么办?
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] 删除。
我来说两句