无限循环和CPU使用率
面试官问我这个问题,我想了解的概念,即CPU如何用法不同:无限循环和CPU使用率
1)如果无限循环在单线程设计,单核运行机
2)如果无限循环在单线程设计与多芯机(4芯)
3)如果无限循环运行是在多线程设计与单核机运行
4)如果无限循环是运行在带有多核心机器(4核心)的多线程设计中
5)当应用程序拥有更多的线程,然后是硬件核心时会发生什么。例如:应用程序在4核心机器中创建30个线程。它会增加应用程序的性能还是降低性能?
6)当应用程序拥有较少的线程和硬件核心时会发生什么。例如:应用程序正在4核心机器中创建5个线程。它会增加应用程序的性能还是降低性能?
请求你解释这些概念,使事情变得清晰。我有很多困惑。
首先,作为注释状态下,完整的答案将取决于各种各样的事情,包括:
- 操作系统和它的线程调度
- 调整参数/资源限制
- 是否该系统运行在裸机上或在虚拟机监控程序下运行
- 由于应用程序的其他内容
- 应用程序的各个方面未提及...
但是,如果我们做一些简化的假设,我们可以给出一些“第一次近似”的答案。
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”核心应用
- 没有相关的操作系统强加的资源限制
这是操作系统和OS使用的线程管理系统。 –
我不是downvoter。但如果我首先会问这个面试问题的4个问题,那么我会逃避那个团队,因为这个问题实际上是无用的。 – Andremoniy
“这取决于”是所有人的正确答案 – xTrollxDudex