抱歉,这听起来很愚蠢。如果runtime.GOMAXPROCS(4)同时运行,会发生什么runtime.NumCpu() == 2
1 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
runtime.GOMAXPROCS
控制将创建多少个操作系统级别的线程来运行程序的goroutine(以及为其提供动力的运行时)。(运行时本身将为其自身创建更多线程,但这是不重要的。)
基本上,这就是所有将要发生的事情。
但是据推测,您打算提出类似的问题,例如“这将如何影响程序性能?”,对吗?如果是,答案是“取决于”。我不确定您是否有机会使用只有一个CPU和一个核心的系统(基本上是大多数消费级IBM PC兼容计算机,直到Pentium®CPU一代为止,这种计算机都具有所谓的“超线程”技术),但这些系统通常在“单核”上运行数百至数千个OS线程(该术语实际上在主流中并不存在,但可以)。
要考虑的另一件事是您的程序不是孤立运行的:同一程序上还有其他程序运行,并且内核本身也有多个内核线程。您可以使用top
或之类的工具htop
来评估系统当前正在所有内核上调度的线程数。
到这个时候,您可能想知道为什么Go运行时默认创建与goroutine一样多的线程来为goroutine提供动力。
大概是由于一个简单的事实,在典型的服务器端工作负载中,您的程序将成为“主要程序”。换句话说,它的线程与其他进程和内核的线程的竞争将相当低。
- 1 回答
- 0 关注
- 306 浏览
添加回答
举报
0/150
提交
取消