线程中的并行性是否也可以使单个CPU系统中的进程受益?我知道他们可以在其他系统中提供帮助,但我很困惑,如果他们真的可以从单CPU系统中受益。
答案 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)