线程中的并行性

时间:2017-10-17 06:18:52

标签: multithreading operating-system cpu cpu-architecture

线程中的并行性是否也可以使单个CPU系统中的进程受益?我知道他们可以在其他系统中提供帮助,但我很困惑,如果他们真的可以从单CPU系统中受益。

3 个答案:

答案 0 :(得分:1)

不使用线程,你会遇到一些痛苦的问题。假设您正在做一些可能阻止的事情,但可能不会。你可以找到一些异步方法来做到这一点,但这会使编程变得更加复杂,如果它只是很少阻塞,那么回报就不是很大。但如果你同步进行,那么在极少数情况下会阻止它,你的整个过程都没有前进的进展。

页面错误就是一个很好的例子。考虑服务器是否遇到错误并且必须运行代码来记录该错误。此代码可能不在内存中,并且可能需要磁盘操作才能读取该代码。在磁盘操作完成之前,您是否希望整个服务器不进行任何前进?

答案 1 :(得分:0)

您可以使用线程作为异步I / O的机制,例如在飞行中保持多个光盘和网络负载,甚至在单处理器系统上也能正常工作。

大多数操作系统都有异步或非阻塞IO API,可以让您从单线程进程中执行相同操作,但对于某些应用程序来说可能不太方便。

有关讨论,请参阅What is the status of POSIX asynchronous I/O (AIO)?:例如基于事件的非阻塞I / O通常比“数十亿阻塞线程”要好得多,在这些线程中,您同时等待每个I / O操作都有一个单独的线程。

所以,无论如何,是的,你可以在单核(没有超线程或其他SMT)系统上使用线程,而不是数字运算吞吐量。 (但是其他获得I / O并发性或并行性的方法或者你想要的任何方式通常都会更好。)

还有其他一些用例,比如一个线程运行GUI而另一个运行模拟的游戏。让操作系统安排它们可能比插入“是时候更新GUI”检查还是在模拟线程中更简单。

(或者实际上是GUI +计算的任何东西,因为你不想从定时器的信号处理程序运行GUI。)

答案 2 :(得分:0)