我听到大家都在谈论多线程如何提高性能。我不相信这一点,除非有我遗漏的东西。如果我有一个包含100个元素的数组并且遍历它需要6秒。当我在两个线程之间划分工作时,处理器将不得不经历相同的工作量和时间,除了它们同时工作但速度只有一半。不应该多线程使它更慢?既然你需要额外的工作分割指示吗?
答案 0 :(得分:15)
对于迭代100个元素多线程的简单任务,任务不会提供性能优势。
迭代超过1000亿个元素并对每个元素进行处理,然后使用额外的CPU可能有助于缩短处理时间。例如,由于I / O,更复杂的任务可能会导致中断。当一个线程处于休眠状态,等待外设完成I / O(例如磁盘写入或键盘按键)时,其他线程可以继续工作。
答案 1 :(得分:5)
对于处理器中有多个核心的CPU绑定任务,您可以在每个处理器核心上划分工作。如果您有两个核心,请将工作拆分为两个线程。这样你就必须全速运行。 但是线程的创建成本非常高,因此您需要相当大的工作量来克服创建线程的初始成本。
您还可以使用线程来改善交互式应用程序中出现的性能(或响应性)。您在后台线程上运行繁重的计算以避免阻止UI交互。您的计算不会更快完成,但您的应用程序没有那些使其显得缓慢且无响应的“挂起”。