多线程可以提高性能吗?怎么样?
我听到大家都在谈论多线程如何提高性能。我不相信这一点,除非有什么我失踪。如果我有100个元素的阵列并遍历它需要6秒钟。当我在两个线程之间分配工作时,处理器必须经历相同的工作量和时间,除了它们同时工作但速度只有一半。多线程不应该让它更慢?既然你需要额外的指示来划分工作?多线程可以提高性能吗?怎么样?
对于迭代100个元素多线程的简单任务,该任务不会提供性能优势。
迭代超过1000亿个元素并对每个元素进行处理,那么使用额外的CPU可能会有助于减少处理时间。例如,更复杂的任务可能会由于I/O而导致中断。当一个线程正在休眠等待外设完成I/O(例如写入磁盘或从键盘按下键)时,其他线程可以继续工作。
+1提及I/O性能 - 首先建立先发制人的主要原因。 – 2013-03-08 14:13:48
许多桌面设备不支持多线程使用。在示例中,更好的磁盘有两个非阻塞通道:用于读取和写入。这意味着只有一个线程可以有效地立即写入。 服务器硬件可以有多个通道:单个磁盘可以有几个SATA连接或可以在RAID中使用。在这种情况下,多个线程更有效。 – 2014-10-11 07:33:48
对于在处理器中有多个核心的CPU绑定任务,您可以将工作分配到每个处理器核心上。如果你有两个核心,把工作分成两个线程。这样你就必须全速工作。 但是线程创建起来确实很昂贵,所以您需要相当大的工作量来克服创建线程的初始成本。
您还可以使用线程来改善交互式应用程序中出现的性能(或响应性)。您在后台线程上运行繁重的计算以避免阻止UI交互。你的计算并没有完成得更快,但你的应用程序没有那些“挂起”,这使得它看起来很慢并且没有反应。
看这一个:http://stackoverflow.com/questions/2856239/will-multi-threading-increase-the-speed-of-the-calculation-on-single-processor – Chris 2013-03-08 11:20:19
如果你有4个处理器例子(现在很普遍,即使在智能手机中),你的程序只有一个线程,它只能访问25%的可用CPU资源。如果你只有一个处理器,它将不会有所作为。 – assylias 2013-03-08 13:41:50
因此,一个单线程程序不可能使用所有内核? – Valentin 2013-03-08 15:47:45