运行GO运行时.双核cpu上的GOMAXPROCS(4)



对不起,如果这听起来很愚蠢的话。

如果运行runtime.GOMAXPROCS(4)而运行runtime.NumCpu() == 2会发生什么

runtime.GOMAXPROCS控制将创建多少操作系统级线程来运行程序的goroutines(以及为其供电的运行时(。(运行时本身将为自己创建更多的线程,但这与重点无关。(

基本上,这就是将要发生的一切。

但据推测,你实际上是想问一些类似"这会如何影响我节目的表现?"的问题,对吧?如果是,答案是"视情况而定"。我不确定您是否有机会使用只有单核CPU的系统(基本上是大多数消费级IBM PC兼容计算机,直到拥有所谓"超线程"技术的奔腾®;CPU(,但这些系统通常在"单核"上运行数百到数千个操作系统线程(当时这个词在主流中并不存在,但还可以(。

另一件需要考虑的事情是,您的程序不是孤立运行的:有其他程序在同一CPU上运行,内核本身也有几个内核内线程。您可以使用类似tophtop的工具来评估系统当前在所有核心上调度的线程数。

此时,您可能想知道为什么Go运行时默认创建与物理内核一样多的线程来为goroutine供电。

据推测,这源于一个简单的事实,即在典型的服务器端工作负载中,您的程序将是某种程度上的"主程序"。换句话说,它的线程与线程的争用其他进程和内核的成本将相对较低。

最新更新