zoukankan      html  css  js  c++  java
  • .Net并行编程之二:并行循环

    本篇内容主要包括:

    1.能够转化为并行循环的条件

    2.并行For循环的用法:Parallel.For

    3.并行ForEach的用法Parallel.ForEach

    4.并行LINQ(PLINQ)的用法AsParallel()

    5.并行中断与并行停止的用法与区别

    6.外部控制循环取消的方法(Break,Stop)

    7.处理循环体中抛出的异常

    8.小循环体的分区并行方法:Parallel.ForEach

    9.最大并行度的控制,Parallel.For,Parallel.ForEach

    10.在循环体中使用局部任务状态(个人理解就是循环体中包含几个阶段,但是这个阶段又要求能线程安全的调用这些方法)

    11.尝试给并行循环定义自己的任务调度程序。

    12.注意事项。

    -------------------华丽的分割线-----------------------------------------

    1.能够转化为并行循环的条件

    .Net Framework 4.0,VisualStudio2010,XP sp3,Vista SP1,Win7,Win8,Win2008...

    对集合中的元素的操作是相同的并且互不影响,不互相影响是指执行的先后顺序不影响最后结果。

    生活中的场景举例:

    a:把银行的多个服务窗口看成是多个处理器核心,不同的客户取款操作是相互不影响的。当客户总量一定时,多个窗口同时开放要比只开放一个窗口效率要高很多。

    b:考试之后,老师判卷子,参加判卷子的老师越多,处理完所有卷子时间越短

    c:程序中处理/初始化一个高数量级的对象数组,对象之间相互独立

    2.并行For循环的用法:Parallel.For 

    public int NumberOfSteps = 10000000;
    double[] result = new double[NumberOfSteps];
                for (int i = 0; i < NumberOfSteps; i++)
                {
                    result[i] = DoWork(i);
                }
    一般的顺序执行的For
      public int NumberOfSteps = 10000000;
     double[] result = new double[NumberOfSteps];
    
                Parallel.For(0, NumberOfSteps, (i) =>
                {
                    result[i] = DoWork(i);
    
                });
    并行的For

    例子中的方法原型为:public static ParallelLoopResult For(int fromInclusive, int toExclusive, Action<int> body);

    返回值为ParallelLoopResult,指示结果的状态,定义如下

     public struct ParallelLoopResult
        {
          public bool IsCompleted { get; }
            public long? LowestBreakIteration { get; }
        }    
    ParallelLoopResult

    Parallel.For 共有12种重载类型,上面是最简单的一种,其它类型的重载可以用来指定一些并行运行的配置,比如并行度,取消标记等。

    3.并行ForEach的用法Parallel.ForEach

    未完待续...

  • 相关阅读:
    周总结07(2018.1.8-2018.1.13)
    软件工程概论课总结
    第二阶段团队冲刺-seven
    人月神话阅读笔记06
    第二阶段团队冲刺-six
    周总结06(2018.1.1-2018.1.6)
    第二阶段团队冲刺-five
    开发记录06
    开发记录05
    开发记录04
  • 原文地址:https://www.cnblogs.com/andyzeng/p/3712577.html
Copyright © 2011-2022 走看看