multithreading - 多线程的目的是增加CPU使用率吗?

标签 multithreading concurrency parallel-processing cpu cpu-architecture

我对多线程的概念很陌生,但是就我对多线程架构的整体理解而言(我了解到有硬件多线程和软件多线程;并不是说我完全理解了这个概念)每个,但我想我在这里谈论的是硬件方面)是“让你的CPU忙碌”。例如,当您当前的任务正在获取硬盘以进行数据导入时,这是为了处理另一项任务。

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

我确信我对问题的陈述完全不准确,但我希望我能让自己理解。

最佳答案

你被赋予了 build 一座房子的任务,你的团队由你、主管和一群 worker 组成。

当你的老板来检查进度时,你希望他看到什么?一名 worker 负责所有工作,另一名 worker 在一旁观看,还是所有 worker 都在忙碌?

你想让 worker 忙于给他们独立的任务, worker 越多,这就越难。 此外,还有一些问题需要考虑: worker A被赋予 build 一堵墙的任务,并且它正在 build 它。在墙变得太高之前,混凝土需要干燥,所以A花了很多时间等待。
在等待期间,他们可以在其他地方提供帮助。
A处于筑墙阶段时要求他们在其他地方提供帮助是没有意义的,他们要么需要拒绝,要么停止他们正在做的事情。
无论哪种方式,您都不会获得任何好处。


工作人员相当于线程。
房子的 build 相当于一个多线程的过程。
build 墙的 worker 相当于CPU受限进程,一个根据需要使用CPU的进程。
混凝土干燥相当于一个IO操作,它会自己完成,不需要任何 worker 。
等待混凝土干燥的A工作人员相当于一个IO受限进程,它几乎什么都不做。
总是忙碌的A工作人员相当于最佳调度/多线程算法。


现在你的任务是学习一本CS书籍,你的团队由你、一个不识字的学生和一群读者组成。

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

因此,即使您有很多员工,您也可以挑选一个并让他们按顺序阅读这本书。

读书是一个本质上顺序问题的例子,它不会从多线程中受益,而 build 房子则是一个非常可并行化的问题的例子。


处理多个 worker 并不容易: worker A可能会筑起一堵墙,因为他们查看了混凝土储藏室并意识到有足够的东西但没有认领。 worker B需要一些混凝土并从储藏室中取出它,现在A不再有足够的混凝土。
这相当于竞争条件:A 在两个不同的时间检查和使用资源(作为两个不同的、可分割的操作),结果取决于工作人员的时间安排。


如果您将 CPU 视为“可以做事的单元”,您会意识到拥有更多“可以做事的单元”只有在它们不站在那儿眺望无限远时才更好。
因此出现了所有关于多线程的文献。

关于multithreading - 多线程的目的是增加CPU使用率吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40638363/

相关文章:

windows - 什么是装载机锁?

python - 多处理器环境下的 scikit-learn 网格搜索

c - 使用 MPI_Gather 将所有进程计算出的总和收集到一个数组中

c++ - 我如何衡量我的多线程代码扩展(加速)的方式?

java - 使用同步块(synchronized block)预订座位

java - 如何使 A runnable 多次随机运行?

java : Create multiple threads with different names (without using for loop)

java - 看来Thread.start()做了一个notify()

python - 来自 tkinter 应用程序的多线程

java:如何同步对数据库的访问?