繁体   English   中英

PLINQ:并行扩展会自动处理单核和多核环境吗?

[英]PLINQ: Will Parallel Extensions automatically handle single and multi-core environments?

LINQ的并行扩展会自动检测内核数量并全部利用吗? 相反,如果代码在单核计算机上运行,​​它仍然可以工作,还是我必须检测核的数量并告诉PLINQ要运行多少个核?

可悲的是,我无权访问任何单核计算机来测试我的代码,因此我什至无法自己进行测试,也无法在其他地方找到任何有用的信息...

此外,虽然起初在何时应该使用并行性似乎很明显,但是对于应在何处以及最重要的是应该使用它方面是否有任何经验法则?

旁注:我不一定要在特定环境中编程。 我倾向于根据手头的任务在Web,客户端/服务器应用程序,Windows应用程序,Windows服务和控制台实用程序之间平均分配时间(取决于项目)。

是的,它可以自行处理内核数量,并且在单核,伪多核(HT)上也可以使用,甚至可以达到愚蠢的内核数量,但是您确实需要针对Parallel编写代码; 它并不仅仅是抓住您现有代码的控制权。

对于何时使用并行机制……这是一个巨大的话题。 实际上,如果您正在执行Web编程-我会忘记它,而只是让IIS对不同的请求使用不同的并行线程(而不是让一个请求占用计算机)。

它主要用于大型运算/数据收集-在专用的应用服务器上或在客户端上。

Marc的答案是正确的建议,如果您所处的环境如此,则建议您让Web请求的并行性质为您处理大部分并行性。

我使用并行扩展取得了巨大成功的一个地方是从远程源加载数据。 我有一个应用程序,需要提取一个数据,使用其中的一些信息来获取30个其他数据,然后返回结果。 我正常运行了第一个提取操作,然后为我需要的每个其他请求定义了一个Future(通过并行扩展),包括了我在匿名方法中所需的一点处理,并对Future数组进行了WaitAll()。 实现非常简单,所有请求(或一次至少几个)并行运行以获取其数据。 尤其是因为我的通话延迟非常长(5秒等待大约1kb的数据),所以这项技术非常有效。

后来,我甚至对其进行了修改,以返回IEnumerable,并使用WaitOne()等待某一期货完成,然后从枚举器中产生它,从而允许调用方在某些请求全部开始之前开始处理它们的结果。完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM