为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
宝慕林4294392 2021-04-02 13:11:38
抱歉,这听起来很愚蠢。如果runtime.GOMAXPROCS(4)同时运行,会发生什么runtime.NumCpu() == 2
查看完整描述

1 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

runtime.GOMAXPROCS控制将创建多少个操作系统级别的线程来运行程序的goroutine(以及为其提供动力的运行时)。(运行时本身将为其自身创建更多线程,但这是不重要的。)

基本上,这就是所有将要发生的事情。

但是据推测,您打算提出类似的问题,例如“这将如何影响程序性能?”,对吗?如果是,答案是“取决于”。我不确定您是否有机会使用只有一个CPU和一个核心的系统(基本上是大多数消费级IBM PC兼容计算机,直到Pentium®CPU一代为止,这种计算机都具有所谓的“超线程”技术),但这些系统通常在“单核”上运行数百至数千个OS线程(该术语实际上在主流中并不存在,但可以)。

要考虑的另一件事是您的程序不是孤立运行的:同一程序上还有其他程序运行,并且内核本身也有多个内核线程。您可以使用top或之类的工具htop来评估系统当前正在所有内核上调度的线程数。

到这个时候,您可能想知道为什么Go运行时默认创建与goroutine一样多的线程来为goroutine提供动力。

大概是由于一个简单的事实,在典型的服务器端工作负载中,您的程序将成为“主要程序”。换句话说,它的线程与其他进程和内核的线程的竞争将相当低。


查看完整回答
反对 回复 2021-04-19
  • 1 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信