多线程是否会增加CPU使用率?

时间:2016-11-16 17:19:59

标签: multithreading concurrency parallel-processing cpu cpu-architecture

我对多线程的概念很新,但是我理解了多线程架构的全部意义(我学到了硬件多线程和软件多线程;而不是我完全理解的概念每个但我认为我在谈论这里的硬件方面)是为了让你的CPU保持忙碌"。例如,当您当前正在获取用于数据导入的硬盘时,处理另一个任务。

如果我是正确的,对于非多线程CPU,如果它已经接近100%的使用率,那么切换到多线程CPU对你没有多大帮助。我是对的吗?

我确信我对这个问题的陈述充满了不准确性,但我希望自己能够理解。

2 个答案:

答案 0 :(得分:2)

你被赋予了建造房屋的任务,你的团队由你,主管和一群工人组成。

当你的老板过来检查进展情况时,你希望他看到什么?一个工人做所有工作而另一个工作,或者所有工人都忙着?

你想让工人忙着给他们独立的任务,工人越多越难。 此外,还有一些问题需要考虑:worker A 被赋予了构建墙的任务,并且正在构建它。在墙壁变得太高之前,混凝土需要干燥,因此 A 会花费大量时间等待。
在这等待期间,他们可以在其他地方提供帮助 要求 A 帮助其他地方,而他们在建筑物 - 墙上的步骤是毫无意义的,他们要么拒绝或停止他们正在做的事情。
无论如何,你都不会获得任何好处。

工人相当于线程 房屋建筑相当于多线程过程 构建墙的 A 工作程序相当于CPU限制进程,这是一个尽可能多地使用CPU的进程。
混凝土烘干相当于IO操作,它将在不需要任何工人的情况下完成 等待混凝土干燥的 A 工人相当于IO有界过程,它几乎什么都不做。
A 工作人员总是忙着等同于最佳调度/多线程算法。

现在你被赋予了学习CS书的任务,你的团队由你,一个无法阅读的学生和一群读者组成。

你会如何分配读者?你不能让他们单独阅读每一章,因为你不能听一个以上的人。

所以,即使你有很多工人,你也会选择一个并让他们按顺序阅读这本书。

阅读一本书是一个固有顺序问题的例子,它不会受益于多线程,而建房子就是一个非常可并行化问题的例子。

处理多个工人并不容易:一个工人 A 可能会启动一堵墙,因为他们看了一下混凝土藏品并意识到它已经足够了,但没有声称它。工人 B 需要一些混凝土并从藏匿处取出,现在 A 不再有足够的混凝土。
这相当于竞争条件: A 正在两个不同的时间检查和使用资源(作为两个不同的,可分割的操作),结果取决于工人的时间。

如果你认为CPU是可以做事的单位"你会意识到拥有更多可以做事的单位"只有当他们没有站在无限远的玻璃上时才会更好 因此所有关于多线程的文献。

答案 1 :(得分:1)

我最初误解了这个问题。当我们并行化某些算法以在多个线程中进行计算时,您的语句对于软件多线程是正确的。在这种情况下,如果您的CPU已经加载了工作,则无法通过在多个线程中执行代码来使其更快地工作。此外,您甚至可以预期由于多线程通信和上下文切换的开销而导致性能下降。但在现代世界中,找到单核CPU并不容易(嵌入式应用除外)。因此在大多数情况下,您需要使用线程来充分利用CPU的计算能力。

但是对于硬件多线程的情况不同,因为它是完全不同的东西。 CPU具有执行算术运算的电路和负责程序流程的电路。现在我们制定一个技巧:我们将第二个电路的数量加倍,并使它们共享算术运算电路。现在两个线程可以同时执行不同的命令:它们不能同时进行求和,但是一个可以添加数字,第二个可以分割一些东西。这就是如何获得性能。因此,现在100%负载是不同的负载,因为您已在CPU中启用了其他电路。相对值是相同的,但绝对性能更高。