.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 = ;
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并行编程之二:并行循环的更多相关文章
- 并行编程之PLINQ
并行编程之PLINQ 并行 LINQ (PLINQ) 是 LINQ 模式的并行实现.PLINQ 的主要用途是通过在多核计算机上以并行方式执行查询委托来加快 LINQ to Objects 查询的执行速 ...
- Pthreads并行编程之spin lock与mutex性能对比分析(转)
POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套常用的API.线程同步(Thread Synchronization)是并行编程中非常重要的通讯手段,其中最典型的应用 ...
- 并行编程之CountdownEvent的用法
教程:http://blog.gkarch.com/threading/part5.html#the-parallel-class http://www.cnblogs.com/huangxinche ...
- IOS高级编程之二:IOS的数据存储与IO
一.应用程序沙盒 IOS应用程序职能在系统为该应用所分配的文件区域下读写文件,这个文件区域就是应用程序沙盒.所有的非代码文件如:图片.声音.映象等等都存放在此. 在mac中command+shift+ ...
- Linux C编程之二:Linux基础
1.Linux的特点 (1)Linux就是一个操作系统(作为用户和计算机之间接口的软件程序) 注:操作系统的功能:命令解释,进程管理,内存管理,输入输出(I/O)操作和外围设备管理,文件管理 (2)特 ...
- socket编程之二:两种链接类型tcp和udp
前面一篇文章说到了一些计算机网络的基础知识.引入了socket.从这节開始,就进入正题了. 一 概述 TCP:Transimission Control Protocol传输控制协议. UPD:Use ...
- Python socket编程之二:【struct.pack】&【struct.unpack】
import struct """通过 socket 的 send 和 recv 只能传输 str 格式的数据""" "" ...
- 并发编程之二:wait、notify、notifyAll的使用方法
wait().notify().notifyAll()是三个定义在Object类里的方法,可以用来控制线程的状态. public final native void wait(long timeout ...
- python socket 编程之二:tcp三次握手
建立起一个TCP连接需要经过“三次握手”:第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:第二次握手:服务器收到syn包,必须确认客户的SYN(ack ...
随机推荐
- Python常用模块之PIL
官方网址:http://www.pythonware.com/products/pil/index.htm Python Imaging Library (PIL) Python图像库(PIL)将图像 ...
- 5.airflow问题
1. Traceback (most recent call last): File "/usr/bin/airflow", line 28, in <module> ...
- spark的运行方式——转载
本文转载自: spark的运行方式 本文主要讲述运行spark程序的几种方式,包括:本地测试.提交到集群运行.交互式运行 等. 在以下几种执行spark程序的方式中,都请注意master的设 ...
- 获取秒级时间戳和毫秒级时间戳---基于python
获取秒级时间戳和毫秒级时间戳 import timeimport datetime t = time.time() print (t) #原始时间数据print (int(t)) #秒级时间戳prin ...
- 【转】node.js框架比较
我偶然间看到这篇文章,转这个文章并没有什么含义,仅仅是感觉总结的不错,对于新学node的友友们来说希望这篇文章为大家对 Node.js 后端框架选型带来一些帮助,学习不再迷茫,也是让我有个保存,以后参 ...
- CodeForces 479C Exams 贪心
题目: C. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- 将java开发的wordcount程序提交到spark集群上运行
今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...
- WordPress使用淘宝IP地址库的API显示评论者的位置信息(二)
1 淘宝IP地址库的接口说明 在上一篇文章<WordPress使用淘宝IP地址库的API显示评论者的位置信息(一)>中,vfhky使用了新浪工具提供的这个IP接口显示博客评论者的位置信息. ...
- Spring-MVC理解之二:前置控制器
原文链接:http://www.cnblogs.com/brolanda/p/4265749.html 一.前置控制器配置与讲解 上篇中理解了IOC容器的初始化时机,并理解了webApplicatio ...
- vue render function
vue render function https://vuejs.org/v2/guide/render-function.html { // Same API as `v-bind:class`, ...