单核和多核

时间:2017-02-12 02:17:54

标签: java multithreading core-data cpu-usage

采访者问我这个问题,我想了解概念,即CPU使用情况如何变化:

1)如果在使用单核机器的单线程设计中运行无限循环

2)如果在使用多核机器(4核心)的单线程设计中运行无限循环

3)如果在使用单核机器的多线程设计中运行无限循环

4)如果在使用多核机器(4核心)的多线程设计中运行无限循环

5)当应用程序拥有更多线程然后是硬件核心时会发生什么。例如:应用程序在4核心机器中创建30个线程。它会提高应用程序的性能还是降低性能?

6)当应用程序的线程少于硬件核心时会发生什么。例如:应用程序在4核心机器中创建5个线程。它会提高应用程序的性能还是降低性能?

请求您解释概念,以便事情清楚。我有很多困惑。

1 个答案:

答案 0 :(得分:1)

首先,正如评论所述,完整的答案取决于各种各样的事情,包括:

  • 操作系统及其线程调度程序
  • 调整参数/资源限制
  • 系统是在裸机上还是在虚拟机管理程序下运行
  • 由于应用程序的其他原因而在系统上加载
  • 未提及的申请的各个方面......

然而,我们可以给出一些"第一近似值"答案,如果我们做一些简化的假设。

  

1)如果使用单核机器在单线程设计中运行无限循环。

让我们称之为基线案例;即,下面描述的加速比对于这种情况是 relative

  

2)如果在使用多核机器(4核心)的单线程设计中运行无限循环

没有加速。即使有多个内核,应用程序也无法使用它们。一个线程一次运行在一个核心上。

  

3)如果在单线程机器的多线程设计中运行无限循环。

没有加速。虽然有N个线程,但每个线程在单个可用核心上平均可获得1 / N的可用执行时间。核心一次只能运行一个线程。

  

4)如果在使用多核机器(4核心)的多线程设计中运行无限循环

加速最多四倍。

  

5)当应用程序拥有更多线程然后是硬件核心时会发生什么。例如:应用程序在4核心机器中创建30个线程。它会提高应用程序的性能还是降低性能?

如果应用程序受CPU限制,则速度不会超过四倍。见上文2)和3)。

  

6)当应用程序的线程少于硬件核心时会发生什么。例如:应用程序在4核心机器中创建5个线程。它会提高应用程序的性能还是降低性能?

你的例子没有意义。 5个线程超过4个核心。如果你的意思是4个内核上有3个线程,那么CPU绑定应用程序的最大加速比是三倍。

以下是我为上述做出的主要简化假设:

  • 系统在待测应用程序之外闲置。
  • 不使用虚拟机管理程序。
  • 充足的物理内存
  • 应用程序受CPU限制(不受网络或磁盘I / O限制)
  • 应用程序长期运行
  • 应用程序使用内存并不会强调可用的内存带宽
  • 应用程序线程不争用锁等
  • 物理核心,而不是" HT"芯
  • 对应用程序没有相关的操作系统强加的资源限制