zoukankan      html  css  js  c++  java
  • 并行聚合操作

     1 方式一:
     2 static int ParallelSum(IEnumerable<int> values)
     3 {
     4  object mutex = new object();
     5   int result = 0;
     6   Parallel.ForEach(source: values,
     7   localInit: () => 0, 
     8   body: (item, state, localValue) => localValue + item,
     9   localFinally: localValue =>
    10 {
    11   lock (mutex)
    12   result += localValue;
    13 });
    14 return result;
    15 }
    16 
    17 方式二:
    18 static int ParallelSum(IEnumerable<int> values)
    19 {
    20      return values.AsParallel().Sum();
    21 }
    22 
    23 方式三:
    24 static int ParallelSum(IEnumerable<int> values)
    25 {
    26 return values.AsParallel().Aggregate(
    27     seed: 0,
    28     func: (sum, item) => sum + item
    29 );
    30 }

    按照并行LINQ(PLINQ)的默认方式,输出队列的次序是不固定的,也可以指明要保持原样的次序,如下:

     1 //输出是无序的
     2 static IEnumerable<int> MultiplyBy2(IEnumerable<int> values)
     3 {
     4 return values.AsParallel().Select(item => item * 2);
     5 }
     6 //输出保持原有的次序
     7 static IEnumerable<int> MultiplyBy2(IEnumerable<int> values)
     8 {
     9 return values.AsParallel().AsOrdered().Select(item => item * 2);
    10 }

    Parallel 类可适用于很多场合,但是在做聚合或进行数据序列的转换时, PLINQ 的代码更
    加简洁。有一点需要注意,相比 PLINQ, Parallel 类与系统中其他进程配合得更好.

  • 相关阅读:
    从零开始webpack4.x(五) js处理
    从零开始webpack4.x(四)样式loader
    从零开始webpack4.x(三)html插件
    从零开始webpack4.x(二)基础
    从零开始webpack4.x(一)介绍
    【转】react和vue渲染流程对比
    css3相关
    html5相关
    this指向
    整数划分问题(递归)
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4677487.html
Copyright © 2011-2022 走看看