在双核CPU上运行GO runtime.GOMAXPROCS(4)

抱歉,这听起来很愚蠢。

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


宝慕林4294392
浏览 313回答 1
1回答

拉莫斯之舞

runtime.GOMAXPROCS控制将创建多少个操作系统级别的线程来运行程序的goroutine(以及为其提供动力的运行时)。(运行时本身将为其自身创建更多线程,但这是不重要的。)基本上,这就是所有将要发生的事情。但是据推测,您打算提出类似的问题,例如“这将如何影响程序性能?”,对吗?如果是,答案是“取决于”。我不确定您是否有机会使用只有一个CPU和一个核心的系统(基本上是大多数消费级IBM PC兼容计算机,直到Pentium®CPU一代为止,这种计算机都具有所谓的“超线程”技术),但这些系统通常在“单核”上运行数百至数千个OS线程(该术语实际上在主流中并不存在,但可以)。要考虑的另一件事是您的程序不是孤立运行的:同一程序上还有其他程序运行,并且内核本身也有多个内核线程。您可以使用top或之类的工具htop来评估系统当前正在所有内核上调度的线程数。到这个时候,您可能想知道为什么Go运行时默认创建与goroutine一样多的线程来为goroutine提供动力。大概是由于一个简单的事实,在典型的服务器端工作负载中,您的程序将成为“主要程序”。换句话说,它的线程与其他进程和内核的线程的竞争将相当低。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go