首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程的目的是增加CPU的使用吗?

多线程的目的是增加CPU的使用吗?
EN

Stack Overflow用户
提问于 2016-11-16 17:19:59
回答 2查看 2.5K关注 0票数 2

我对多线程的概念非常陌生,但对于我理解多线程体系结构的全部意义(我了解到有硬件多线程和软件多线程;我并不完全理解每一个多线程的概念,但我认为我在这里谈论的是硬件方面)就是“让您的CPU忙碌”。例如,当当前任务正在获取硬盘以进行数据导入时,这将处理另一个任务。

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

我相信我对这个问题的陈述是不准确的,但我希望我能让自己明白。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-16 17:30:28

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

但是对于硬件来说,多线程的情况是不同的,因为它是一件完全不同的事情。CPU有执行算术运算的电路和负责程序流的电路。现在我们做了一个技巧:我们使第二个电路的数目翻倍,并使它们共享算术运算电路。现在,两个线程可以同时执行不同的命令:它们不能同时执行求和,但一个线程可以添加数字,第二个线程可以对某些内容进行除法。这就是如何获得业绩。因此,现在100%的负载是不同的负载,因为您已经在CPU中启用了额外的电路。相对值相同,但绝对性能较高。

票数 1
EN

Stack Overflow用户

发布于 2016-11-17 12:51:55

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

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

你想让员工忙着给他们独立的任务,越多的人越难。此外,还有一些问题需要考虑:工人A被赋予建造隔离墙的任务,而它正在建造隔离墙。在墙太高之前,混凝土需要干燥,所以A花了很多时间等待。

在此等待期间,他们可以帮助其他地方。

当他们在大楼里的时候,向其他地方寻求帮助是毫无意义的,他们要么拒绝,要么停止他们正在做的事情。

不管怎样,你都得不到任何好处。

工人们就像线程一样。

房屋建筑相当于一个多线程的过程。

建造围墙的A工作人员相当于CPU有限制的进程,这是一个根据需要使用CPU的进程。

混凝土干燥相当于IO作业,不需要任何工人就能完成。

等待混凝土干燥的A工人相当于一个IO有界的过程,它几乎什么也不做。

一个工作人员总是很忙,这相当于一个最优调度/多线程算法。

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

你将如何分配读者?你不能让他们单独读每一章,因为你不能多听一个人的话。

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

阅读一本书是一个内在的顺序问题的一个例子,不会受益于多线程,而建造一所房子是一个非常可并行的问题的例子。

处理多个工人是不容易的:一个工人A可能会启动一堵墙,因为他们看了看混凝土仓库,发现里面有足够的东西,但没有认领。工人B需要一些混凝土,从仓库里拿出来,现在A已经没有足够的混凝土了。

这相当于一个竞赛条件:a是在两个不同的时间(作为两个不同的、可划分的操作)检查和使用资源,其结果取决于工人的时间安排。

如果你认为CPU是“能做事情的单位”,你就会意识到,只有当它们不站在无限远处的玻璃上时,拥有更多的“能做事情的单位”才更好。

因此,所有关于多线程的文献。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40638363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档