12

我听到每个人都在谈论多线程如何提高性能。我不相信这一点,除非我错过了什么。如果我有一个包含 100 个元素的数组并遍历它需要 6 秒。当我在两个线程之间分配工作时,处理器将不得不经历相同数量的工作和时间,除了它们同时工作但速度减半。多线程不应该让它更慢吗?既然您需要额外的说明来划分工作?

4

2 回答 2

19

对于迭代 100 个元素的多线程简单任务,该任务不会提供性能优势。

迭代超过 1000 亿个元素并对每个元素进行处理,然后使用额外的 CPU 可能有助于减少处理时间。例如,更复杂的任务可能会因 I/O 而导致中断。当一个线程正在休眠等待外围设备完成 I/O(例如磁盘写入或键盘按键)时,其他线程可以继续工作。

于 2013-03-08T11:18:07.610 回答
6

对于处理器中有多个内核的 CPU 密集型任务,您可以在每个处理器内核上划分工作。如果您有两个内核,请将工作拆分为两个线程。这样你就必须让线程全速工作。但是创建线程确实很昂贵,因此您需要相当大的工作量来克服创建线程的初始成本。

您还可以使用线程来提高交互式应用程序中的显示性能(或响应能力)。您在后台线程上运行大量计算以避免阻塞 UI 交互。您的计算并没有更快地完成,但是您的应用程序没有那些使其看起来缓慢且无响应的“挂起”。

于 2013-03-08T13:02:22.197 回答