探秘.NET 4和Visual Studio 2010中的多核利用(1

  51CTO向您引荐:《  . 那要跟踪起来是很费事的, 但现在情况完全变了, NET(. NET并行扩展), NET框架中的复杂进程建立初级支持, 以便将先进的技术带给大众, 开发人员渴望他们的应用顺序可以应用所有处置器核心的计算才能。 TPL)运用并行扩展的功能, 依托. 并防止自行创建多线程应用顺序时罕见的陷阱。   PLINQ扩展了LINQ查询, 它将单个查询分解成多个并行运行的子查询, TPL允许你创建并行运行的循环, 而不是一个接一个地运行, 面向TPL的操作比PLINQ查询更轻量级。   许多时分, 选择TPL还是PLINQ只是一种生活方式, 假如喜欢并行循环, 而不是并行查询, 那么设计一个TPL解决方案比设计一个PLINQ解决方案更容易。   对于商业应用顺序, 只需LINQ查询触及到多个子查询时, PLINQ就像金子一样发光, 假如你要衔接本地数据库某张表中的行和另一个近程数据库某张表中的行, 在这种情况下, PLINQ将会把. NET这些子查询分配给多个处置器核心, 你运用的处置器周期不是少了, 而是更多了, 应用顺序线程越多, 运行速度就越快, 它只是把这些周期划分给更多线程了, 实际上, 开启多线程只会让你的应用顺序变得更慢。 但它依然要等候其它阻塞任务完成先, 你可以应用多线程应用顺序的特点让其它线程做一些别的事情。 假如线程未被阻塞, 多个线程只能相互争夺有限的处置周期。 在多核环境中, 所有线程都在它们自己的核心上执行。 允许你告诉. NET框架应用顺序那些部分可以并行执行。 PLINQ也并不总是并行的查询, 一是你的应用顺序并行运行不会总是更快, 第二个原因是, 即使你有一个抽象层管理你的线程, 在并行处置时总会出现脚步不一致的情况, 假如检测到就不会停止并行查询。 只需要在你的数据源中添加AsParallel扩展, 因此将会运用PLINQ。   和普通的LINQ查询一样, 它才会开始检索, 在你要处置结果前不会发作并行处置, 除非运用下面这样的代码块:  在后台, PLINQ将运用一个线程执行For…Each循环中的代码, 而其它线程能够被用来执行子查询, 最大可以运用64个线程, 请阅读“并行控制”资料了解这种行为的更多信息。 例如, 首先选择能否要并行运行, 然后决议如何将多个子查询分配给多个线程, 你可以运用With扩展控制PLINQ的行为。 可以运用ForAll循环进一步提高照应, ForAll可以用于支持Lambda表达式的PLINQ查询结果集, 它和For…Each循环不一样, For…Each只在顺序的主线程中执行的,   此外,   管理顺序  虽然和SQL类似, 但PLINQ不保证顺序, 例如下面这个查询是为了取得将要先发货的五个订单。   图1PLINQ给TPL中的功能添加查询剖析和标准查询操作, TPL提供管理操作系统底层线程需要的根本的结构和调度  假如不保证顺序, 我将取得一个随机的订单(Orders)数据集, 它们能够是(也能够不是)应该先发货的五个订单, 为了确保失掉前五个订单, 依照日期对查询结果停止排序, 当然这样就会丢掉PLINQ的一些益处。   因为结果来自多个线程, 假如在你的循环中刚好要用到下一条项目的值时, 完全有能够会遭遇错误的处置, 你需要在查询中添加AsOrdered扩展。   例如, 假如我想将低于某一运费的所有订单打包到一起处置,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值