2017-02-12 129 views
-4

面试官问我这个问题,我想了解的概念,即CPU如何用法不同:无限循环和CPU使用率

1)如果无限循环在单线程设计,单核运行机

2)如果无限循环在单线程设计与多芯机(4芯)

3)如果无限循环运行是在多线程设计与单核机运行

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

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

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

请求你解释这些概念,使事情变得清晰。我有很多困惑。

+1

这是操作系统和OS使用的线程管理系统。 –

+2

我不是downvoter。但如果我首先会问这个面试问题的4个问题,那么我会逃避那个团队,因为这个问题实际上是无用的。 – Andremoniy

+2

“这取决于”是所有人的正确答案 – xTrollxDudex

回答

1

首先,作为注释状态下,完整的答案将取决于各种各样的事情,包括:

  • 操作系统和它的线程调度
  • 调整参数/资源限制
  • 是否该系统运行在裸机上或在虚拟机监控程序下运行
  • 由于应用程序的其他内容
  • 应用程序的各个方面未提及...

但是,如果我们做一些简化的假设,我们可以给出一些“第一次近似”的答案。

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

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

2)如果无限循环在单线程设计与多芯机(4芯)

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

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

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

4)如果无限循环在多线程设计与多芯机(4芯)

加速比高达四倍的运行。

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

如果应用程序受CPU限制,您将得到不超过四倍的加速比。见上面2)和3)。

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

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


下面是我已用于上述提出的主要简化假设:

  • 系统是从测试的应用程序开空闲。
  • 不使用虚拟机管理程序。
  • 足够的物理内存
  • 应用受限于CPU(未网络或磁盘I/O绑定)
  • 应用是长期运行的
  • 应用程序的使用的存储器不强调的可用存储器带宽
  • 应用线程不争的锁,等
  • 物理核心,而不是“HT”核心应用
  • 没有相关的操作系统强加的资源限制