在没有超线程的单CPU计算机上使用多线程是否有性能优势?
就计算速度而言,不行。实际上,由于管理线程的开销,事情会变慢。
就响应速度而言,可以。例如,您可以让一个线程等待IO操作,同时让另一个线程运行GUI。
这取决于您的应用程序。如果它花费了所有时间使用CPU,那么多线程只会减慢速度 - 尽管您可能能够使用它来更快地响应用户,从而给人留下更好的性能印象。
但是,如果您的代码受其他限制,例如使用文件系统、网络或任何其他资源,则多线程可以帮助,因为它允许您的应用异步操作。因此,当一个线程正在等待从磁盘加载文件时,另一个线程可以查询远程Web服务器,另一个线程正在重新绘制GUI,而另一个线程正在执行各种计算。
使用多个线程还可以简化业务逻辑,因为您不必过多关注各种独立任务之间需要交错的方式。如果操作系统的调度逻辑比您的逻辑更好,那么您可能确实会看到改进的性能。
在单个CPU上可以考虑使用多线程
在单个CPU上不应该使用多线程的情况
使用单个CPU上的多个线程(或进程)确实有好处 - 如果一个线程正在忙于等待某些事情,其他线程可以继续进行有用的工作。
但是,这可能会被任务切换的开销抵消。您需要在生产级硬件上对您的应用程序进行基准测试和/或分析以找出答案。
无论可用的 CPU 数量如何,如果您需要抢占式多任务处理和/或具有异步组件的应用程序(即几乎任何将响应 GUI 与非平凡数量的计算或连续 I/O 处理相结合的东西),多线程比使用多个进程更好,后者是为每个应用程序使用多个进程。
这是因为同一进程中的线程可以比多个进程更有效地交换数据,因为它们共享相同的内存上下文。
请参阅 计算机多任务处理的维基百科文章,以获得对这些问题的相当简明的讨论。