16

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

4

6 回答 6

31

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

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

于 2008-09-06T18:24:06.300 回答
11

这取决于您的应用程序。如果它把所有时间都花在使用 CPU 上,那么多线程只会减慢速度——尽管您可以使用它来更好地响应用户,从而给人以更好性能的印象

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

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

于 2008-09-15T21:10:29.633 回答
7

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

  1. 如果您使用网络资源
  2. 如果你做高强度的 IO 操作
  3. 如果从数据库中提取数据
  4. 如果您利用其他可能延迟的东西
  5. 如果您想让您的应用程序具有超高速反应

当您不应该在单个 CPU 上使用多线程时

  1. 执行几乎 100% CPU 使用率的高强度操作
  2. 如果您不确定如何使用线程和同步
  3. 如果您的应用程序不能分成多个并行进程
于 2012-06-15T08:04:55.247 回答
2

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

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

于 2008-09-16T21:17:18.657 回答
1

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

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

有关这些问题的相当简明的讨论,请参阅有关计算机多任务处理的 Wikipedia 文章。

于 2008-09-06T21:01:51.757 回答
1

绝对地!如果您执行任何类型的 I/O,则拥有多线程系统具有很大的优势。当一个线程等待 I/O 操作(相对较慢)时,另一个线程可以做有用的工作。

于 2008-09-17T18:20:00.133 回答