Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 单CPU上的多线程和性能_Performance_Multithreading - Fatal编程技术网

Performance 单CPU上的多线程和性能

Performance 单CPU上的多线程和性能,performance,multithreading,Performance,Multithreading,在一台没有超线程的CPU上使用多个线程有什么性能优势吗 就计算速度而言,不会。事实上,由于管理线程的开销,事情会变慢 就反应而言,是的。例如,您可以让一个线程等待IO操作,同时让另一个线程运行GUI。如果您需要抢占式多任务处理和/或带有异步组件的应用程序,则无论可用CPU的数量如何(即,几乎任何将响应GUI与大量计算或连续i/O处理相结合的东西),多线程的性能要比另一种方法好得多,即为每个应用程序使用多个进程 这是因为同一进程中的线程可以比多个进程更高效地交换数据,因为它们共享相同的内存上下文

在一台没有超线程的CPU上使用多个线程有什么性能优势吗

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


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

如果您需要抢占式多任务处理和/或带有异步组件的应用程序,则无论可用CPU的数量如何(即,几乎任何将响应GUI与大量计算或连续i/O处理相结合的东西),多线程的性能要比另一种方法好得多,即为每个应用程序使用多个进程

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


有关这些问题的简要讨论,请参阅。

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

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


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

是的,使用多线程有好处(或进程)在单个CPU上-如果一个线程正忙着等待某些东西,其他线程可以继续执行有用的工作


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

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

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

  • 如果你使用网络资源
  • 如果您执行高强度IO操作
  • 如果从数据库中提取数据
  • 如果你利用其他东西可能会延迟
  • 如果你想让你的应用程序有超快的反应
  • 当您不应在单个CPU上使用多线程时

  • 高强度操作,几乎100%使用CPU
  • 如果您不确定如何使用线程和同步
  • 如果您的应用程序无法划分为多个并行进程

  • 从学术角度来说,你是绝对正确的。然而,地球上没有一个程序是100%CPU工作的,这意味着在实践中,多线程可以产生积极的影响,即使只有一个计算单元。这个答案可以更详细吗?例如,与多处理器相比,多线程有什么好处?