单CPU上的多线程和性能表现

16

在没有超线程的单CPU计算机上使用多线程是否有性能优势?

6个回答

32

就计算速度而言,不行。实际上,由于管理线程的开销,事情会变慢。

就响应速度而言,可以。例如,您可以让一个线程等待IO操作,同时让另一个线程运行GUI。


10
从学术角度来看,你是完全正确的。然而,在实际应用中,没有一个程序是100%的CPU工作,这意味着,即使只有一个计算单元,多个线程也可能产生积极影响。 - Isak Savo
2
这个回答能否更详细一些?例如,与多处理器相比,多线程有什么好处? - starcorn

11

这取决于您的应用程序。如果它花费了所有时间使用CPU,那么多线程只会减慢速度 - 尽管您可能能够使用它来更快地响应用户,从而给人留下更好的性能印象

但是,如果您的代码受其他限制,例如使用文件系统、网络或任何其他资源,则多线程可以帮助,因为它允许您的应用异步操作。因此,当一个线程正在等待从磁盘加载文件时,另一个线程可以查询远程Web服务器,另一个线程正在重新绘制GUI,而另一个线程正在执行各种计算。

使用多个线程还可以简化业务逻辑,因为您不必过多关注各种独立任务之间需要交错的方式。如果操作系统的调度逻辑比您的逻辑更好,那么您可能确实会看到改进的性能。


8

在单个CPU上可以考虑使用多线程

  1. 如果您使用网络资源
  2. 如果您进行高强度IO操作
  3. 如果您从数据库获取数据
  4. 如果您利用其他可能存在延迟的内容
  5. 如果您想要使您的应用程序具有超快速反应

在单个CPU上不应该使用多线程的情况

  1. 高强度操作几乎占用了100%的CPU
  2. 如果您不确定如何使用线程和同步
  3. 如果您的应用程序不能被分成几个并行进程

2

使用单个CPU上的多个线程(或进程)确实有好处 - 如果一个线程正在忙于等待某些事情,其他线程可以继续进行有用的工作。

但是,这可能会被任务切换的开销抵消。您需要在生产级硬件上对您的应用程序进行基准测试和/或分析以找出答案。


1
当然!如果你在进行任何类型的 I/O 操作,拥有一个多线程系统是非常有优势的。当一个线程等待 I/O 操作(这些操作相对较慢)时,另一个线程可以执行有用的工作。

1

无论可用的 CPU 数量如何,如果您需要抢占式多任务处理和/或具有异步组件的应用程序(即几乎任何将响应 GUI 与非平凡数量的计算或连续 I/O 处理相结合的东西),多线程比使用多个进程更好,后者是为每个应用程序使用多个进程。

这是因为同一进程中的线程可以比多个进程更有效地交换数据,因为它们共享相同的内存上下文。

请参阅 计算机多任务处理的维基百科文章,以获得对这些问题的相当简明的讨论。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接