【问题标题】:Infinite loop and CPU usage on single core and multicore [closed]单核和多核上的无限循环和 CPU 使用率[关闭]
【发布时间】:2017-06-30 05:27:42
【问题描述】:

面试官问我这个问题,我想了解概念,即 CPU 使用率如何变化:

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

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

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

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

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

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

要求您解释这些概念,以便清楚。我有很多困惑。

【问题讨论】:

  • 这取决于操作系统和操作系统使用的线程管理系统。
  • 我不是反对者。但是如果我在面试的时候先被问到这4个问题,我会离开那个团队,因为这些问题实际上是没有用的。
  • “这取决于”是所有问题的正确答案

标签: java multithreading core-data cpu-usage


【解决方案1】:

首先,正如 cmets 所说,完整的答案将取决于各种因素,包括:

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

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

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

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

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”内核
  • 应用程序没有相关的操作系统强加的资源限制

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-19
    • 2013-07-17
    • 2016-08-19
    • 1970-01-01
    • 2020-09-16
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多