本篇内容主要包括:

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 = ;
double[] result = new double[NumberOfSteps];
for (int i = ; i < NumberOfSteps; i++)
{
result[i] = DoWork(i);
}

一般的顺序执行的For

  public int NumberOfSteps = ;
double[] result = new double[NumberOfSteps]; Parallel.For(, 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

未完待续...

.Net并行编程之二:并行循环的更多相关文章

  1. 并行编程之PLINQ

    并行编程之PLINQ 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现.PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速 ...

  2. Pthreads并行编程之spin lock与mutex性能对比分析(转)

    POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API.线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用 ...

  3. 并行编程之CountdownEvent的用法

    教程:http://blog.gkarch.com/threading/part5.html#the-parallel-class http://www.cnblogs.com/huangxinche ...

  4. IOS高级编程之二:IOS的数据存储与IO

    一.应用程序沙盒 IOS应用程序职能在系统为该应用所分配的文件区域下读写文件,这个文件区域就是应用程序沙盒.所有的非代码文件如:图片.声音.映象等等都存放在此. 在mac中command+shift+ ...

  5. Linux C编程之二:Linux基础

    1.Linux的特点 (1)Linux就是一个操作系统(作为用户和计算机之间接口的软件程序) 注:操作系统的功能:命令解释,进程管理,内存管理,输入输出(I/O)操作和外围设备管理,文件管理 (2)特 ...

  6. socket编程之二:两种链接类型tcp和udp

    前面一篇文章说到了一些计算机网络的基础知识.引入了socket.从这节開始,就进入正题了. 一 概述 TCP:Transimission Control Protocol传输控制协议. UPD:Use ...

  7. Python socket编程之二:【struct.pack】&【struct.unpack】

    import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...

  8. 并发编程之二:wait、notify、notifyAll的使用方法

    wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. public final native void wait(long timeout ...

  9. python socket 编程之二:tcp三次握手

    建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手:服务器收到syn包,必须确认客户的SYN(ack ...

随机推荐

  1. Linux 150命令之查看文件及内容处理命令 cat tac less head tail cut

    cat 查看文件内容 [root@mysql tmp]# cat 2.txt 1234 -n 查看行号 [root@mysql tmp]# cat -n 2.txt      1 1234       ...

  2. ES6的新特性(9)——对象的扩展

    对象的扩展 属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法.这样的书写更加简洁. const foo = 'bar'; const baz = {foo}; baz // {f ...

  3. Scrum立会报告+燃尽图(Beta阶段第一次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://coding.net/u/wuyy694 ...

  4. dcom初步窥探一

    一.问题带入: 从delphi 5开始,有许多人都面临过这样的问题:com应用开发出来并且在本机上运行一切正常,但是一旦分发出去实施远程访问时,就无法正常运行了.我自己有段时间在看到“拒绝访问”错误提 ...

  5. 【树上DFS】Tree and Polynomials

    http://codeforces.com/gym/101372 D push1[i][k]:所有操作1总共要让节点i下推多少系数k push2[i][k]:所有操作2总共要让节点i上推多少系数k s ...

  6. 团队Alpha冲刺(八)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  7. CodeForces 508E Arthur and Brackets 贪心

    题目: E. Arthur and Brackets time limit per test 2 seconds memory limit per test 128 megabytes input s ...

  8. c# Webservice技术整理

    因为平常项目中使用webservice比较少,然后就将本来不太熟悉的webservice给忘记掉了.所以再次整理如下: 百度搜索关键词 :c# webservice 1. 联接地址: http://w ...

  9. 软工网络15个人作业4--alpha阶段个人总结

    一.个人总结 自我评价表 类别 具体技能和面试问题 现在的回答 毕业找工作 语言 最拿手的语言之一,代码量是多少 java,代码量大概两三千行吧 语言 最拿手的语言之二,代码量是多少 python,代 ...

  10. Java中的网络编程-2

    Socket编程:(一般的网络编程) <1> 两个 JAVA 应用程序可通过一个双向的网络通信连接, 实现数据交换, 这个双向链路的一段称为一个 Socket. <2> Soc ...