日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Parallel使用

發布時間:2023/12/18 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Parallel使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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.Nonepublic Int32 MaxDegreeOfParallelism{get;set;}//允許指定可以并發操作的最大工作項數目,默認為-1(可用CPU數)public TaskScheduler TaskScheduler{get;set;}//使用哪個TaskScheduler,默認為TaskScheduler.Default }For,ForEach的三個操作的重載版本 任務局部初始化委托(localInit),為參與工作的每個任務都調用一次該委托。這個委托時在任務被要求出來一個工作項之前調用的。 主體委托(body),為參與工作的各個線程所處理的每一項都調用一次該委托 任務局部終結委托(localFinally),為參與工作的每一個任務都調用一次該委托。這個委托是在任務處理好派發給它的所有工作項之后調用的。即時主體委托代碼引發一個未處理的異常,也會調用它。 此調用的參數較復雜,具體參見MSDNParallelLoopState對象參與工作的每個任務都獲得它自己的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 {//如果操作提前終止,以下方法返回falsepublic Boolean IsCompleted{get;}public Int64? LowestBreakIteration{get;} }

總結

以上是生活随笔為你收集整理的Parallel使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。