分享

Parallel使用

 印度阿三17 2018-10-01

Parallel的静态For,ForEach和Invoke方法
Parallel是对Task的封装,目的是简化一些常见的编程情形中任务Task的使用,它内部使用Task。
以上三者的编程情形:
Parallel.For(0,1000,i=>DoWork(i));//指定某个操作的执行次数
Parallel.ForEach(collection,item=>DoWork(item));//利用集合collection中的每一项item执行并发操作。
Parallel.Invoke(
()=>Method1(),
()=>Method2(),
()=>Method3());//并发执行一些方法

注意:
1.如果任何操作抛出未处理的异常,Parallel方法最后会抛出一个AggregateException
2.并发的前提条件:
1)工作项必须能并行之行
2)避免过多的资源争用,会导致上下文切换过于频繁和锁争用问题。
3.Parellel本身有开销,所以如果并发执行的每一项都能很快执行,那么不应该使用并发执行。
应用并发的场景:
1)IO限制
计算不复杂,但是需要等待操作完成,如访问数据库等耗时较长的操作就是IO限制。
2)计算限制
计算过于复杂,执行计算的线程需要耗很长时间才能结束计算。如果等待这个线程完成再执行别的操作,那么可能等很长时间

???那么采集点数较少时使用同步,采集点数过多时使用异步这个属于哪个限制导致的多线程问题??

ParallelOptions
Parallel的静态For,ForEach和Invoke方法都提供了接受一个ParallelOptions对象的重载版本。
public class ParallelOptions{
	public ParallelOptions();
	public CancellationToken cancellationToken{get;set;}//取消操作,默认为CancellationToken.None
	public Int32 MaxDegreeOfParallelism{get;set;}//允许指定可以并发操作的最大工作项数目,默认为-1(可用CPU数)
	public TaskScheduler TaskScheduler{get;set;}//使用哪个TaskScheduler,默认为TaskScheduler.Default
}

For,ForEach的三个操作的重载版本
任务局部初始化委托(localInit),为参与工作的每个任务都调用一次该委托。这个委托时在任务被要求出来一个工作项之前调用的。
主体委托(body),为参与工作的各个线程所处理的每一项都调用一次该委托
任务局部终结委托(localFinally),为参与工作的每一个任务都调用一次该委托。这个委托是在任务处理好派发给它的所有工作项之后调用的。即时主体委托代码引发一个未处理的异常,也会调用它。
此调用的参数较复杂,具体参见MSDN

ParallelLoopState对象
	参与工作的每个任务都获得它自己的ParallelLoopState对象,并可通过这个对象和参与工作的其他任务进行交互。
public class ParallelLoopState{
	public void Stop();//告诉循环停止处理任何更多的工作
	public Boolean IsStopped{get;}

	public void Break();//告诉循环不再处理当前项之后的项
	public Int64? LowestBreakIteration{get;}

	public Boolean IsExceptional{get;}
	public Boolean ShouldExitCurrentIteration{get;}//是否可以提前退出
}

ParallelLoopResult对象
Parallel的静态For,ForEach方法都返回一个ParallelLoopResult实例
public struct ParallelLoopResult
{
	//如果操作提前终止,以下方法返回false
	public Boolean IsCompleted{get;}
	public Int64? LowestBreakIteration{get;}
}
来源:http://www./content-4-33001.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多