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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Multithreading 多线程是否提高了性能?怎么用?_Multithreading_Performance_Cpu Speed - Fatal编程技术网

Multithreading 多线程是否提高了性能?怎么用?

Multithreading 多线程是否提高了性能?怎么用?,multithreading,performance,cpu-speed,Multithreading,Performance,Cpu Speed,我听到每个人都在谈论多线程如何提高性能。我不相信,除非我遗漏了什么。如果我有一个100个元素的数组,遍历它需要6秒。当我在两个线程之间分配工作时,处理器将必须完成相同的工作量,因此需要相同的时间,只是它们同时工作,但速度只有两个线程的一半。多线程不应该让它更慢吗?由于您需要额外的说明来划分工作?对于迭代100个元素多线程的简单任务,该任务不会提供性能优势 迭代1000亿个元素并对每个元素进行处理,那么使用额外的CPU很可能有助于减少处理时间。而更复杂的任务可能会由于I/O等原因而导致中断。当一个

我听到每个人都在谈论多线程如何提高性能。我不相信,除非我遗漏了什么。如果我有一个100个元素的数组,遍历它需要6秒。当我在两个线程之间分配工作时,处理器将必须完成相同的工作量,因此需要相同的时间,只是它们同时工作,但速度只有两个线程的一半。多线程不应该让它更慢吗?由于您需要额外的说明来划分工作?

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


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

对于CPU受限的任务,如果处理器中有多个内核,则可以在每个处理器内核上分配工作。如果您有两个内核,请在两个线程上拆分工作。这样你就必须全速工作。 但是,创建线程的成本非常高,因此需要相当大的工作负载来克服创建线程的初始成本


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

看看这个:如果您有4个处理器(这在当今非常常见,甚至在智能手机中),并且您的程序只有一个线程,它只能访问25%的可用CPU资源。如果你只有一个处理器,那就没什么区别了。因此,单线程程序不可能使用所有内核?+1用于提及I/O性能——这是当初构建抢占式多任务处理器的主要原因。许多桌面设备不支持多线程使用。例如,更好的磁盘有两个非阻塞通道:读通道和写通道。这意味着一次只能有一个线程有效地写。服务器硬件可以有多个通道:单个磁盘可以有很少的SATA连接,或者可以在RAID中使用。在这种情况下,多线程更有效。