单个CPU上的多个线程和性能

时间:2008-09-06 18:21:10

标签: performance multithreading

在没有超线程的单个CPU的计算机上使用多个线程有什么性能优势吗?

6 个答案:

答案 0 :(得分:30)

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

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

答案 1 :(得分:10)

这取决于您的申请。如果它花费所有时间使用CPU,那么多线程只会降低速度 - 尽管您可以使用它来更好地响应用户,从而为印象提供更好的性能。< / p>

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

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

答案 2 :(得分:6)

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

  1. 如果您使用网络资源
  2. 如果您执行高密集的IO操作
  3. 如果从数据库中提取数据
  4. 如果你利用其他可能有延迟的东西
  5. 如果你想让你的应用程序具有超速反应
  6. 当您不应在单个CPU上使用多线程时

    1. 几乎100%CPU使用率的高密集型操作
    2. 如果您不确定如何使用线程和同步
    3. 如果您的申请不能分为几个并行流程

答案 3 :(得分:2)

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

然而,这可以通过任务切换的开销来抵消。您必须在生产级硬件上对 应用程序进行基准测试和/或分析才能找到答案。

答案 4 :(得分:1)

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

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

有关这些问题的详细讨论,请参阅this Wikipedia article on computer multitasking

答案 5 :(得分:1)

绝对!如果你进行任何类型的I / O,那么拥有一个多线程系统是非常有利的。当一个线程等待I / O操作(相对较慢)时,另一个线程可以做有用的工作。