Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.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
.net 多线程应用程序是否更快?你能相信吗?_.net_Multithreading_Multiprocessing - Fatal编程技术网

.net 多线程应用程序是否更快?你能相信吗?

.net 多线程应用程序是否更快?你能相信吗?,.net,multithreading,multiprocessing,.net,Multithreading,Multiprocessing,假设我运行了一个创建四个.NET线程的程序。每个线程运行大约需要45分钟(作为单线程应用程序单独运行) 假设我可以访问带有四核处理器的服务器。所有四个线程都能在45分钟内完成吗 我今天读了一本书,书中说,当涉及多线程时,不要想当然。这本书似乎暗示,在我的示例中,一天可能需要45分钟,因为所有四个内核都是并行使用的。然而,在另一天,该计划可能需要三个小时(4*45)才能完成 更新 这个问题的目的是澄清我读到的一点。我的书暗示我的程序(创建四个线程,每天运行一次)可以在第1天使用四个内核,在第x天使

假设我运行了一个创建四个.NET线程的程序。每个线程运行大约需要45分钟(作为单线程应用程序单独运行)

假设我可以访问带有四核处理器的服务器。所有四个线程都能在45分钟内完成吗

我今天读了一本书,书中说,当涉及多线程时,不要想当然。这本书似乎暗示,在我的示例中,一天可能需要45分钟,因为所有四个内核都是并行使用的。然而,在另一天,该计划可能需要三个小时(4*45)才能完成

更新
这个问题的目的是澄清我读到的一点。我的书暗示我的程序(创建四个线程,每天运行一次)可以在第1天使用四个内核,在第x天使用一个内核。我想知道我是否正确理解了这一点。我对程序进行了10次测试,每次都使用了四个内核。因此,我可以假设所有四个内核都会被使用吗?

这本书是正确的,因为在典型的多线程程序中,有很多因素会合谋在某些或所有情况下导致其速度减慢。例如,粗心地使用锁定是一个很好的选择,它可以使程序的速度永远不会超过单核上的速度,而且通常要慢得多。或者,像过度频繁的上下文切换这样微妙的事情可能会在所有核心上造成大规模缓存污染,并随之减速。基本上,没有详细查看代码(最好是测试代码),您只是不知道

这也不完全是Windows内核调度器的错,因为据我所知,Linux、Hurd、Mach等在这项工作上并没有绝对的优势。您可以设计一些不会遇到这些问题的系统,但通常会以二进制兼容性为代价,而且通常还会以源代码兼容性为代价。因此,此类工作通常仅限于研究操作系统


编辑:中给出了缓存污染和互斥调度程序公平性的更详细示例。

我很惊讶高代表性用户提出了如此低质量的问题。对我来说,这听起来像是一个尚未研究过的家庭作业问题。这完全取决于所承担的任务。@cybermonkey,这不是一个家庭作业问题。相关:,@w0051977,请重新填写。你的问题也应该是超级用户。运行时间不仅取决于正在执行的任务,还取决于机器上同时运行的其他程序、当前网络流量负载(如果程序在网络上通信)、数据库上的当前负载(如果使用数据库),以及许多其他因素。如果每个线程需要45分钟来处理,那么最好是让所有四个线程在45分钟内并发运行。但这四个线程可能需要超过三个小时。