第二章 命令式數據並行
幾種並行類型:
數據並行
任務並行
流水線
在System.threading.tasks.parallel下
parallel.for
parallel.foreach(可以自定義parytitioner)
parallel.invoke
1. Parallel.Invoke
沒有特定執行順序
交錯並發:邏輯內核通過時間片機制和快速上下文切換實現並行的假象
並發:不解釋
熱點:潛在的可並行代碼
加速比:串行執行時間/並行執行時間
2. Parallel.for
每一次迭代一會當作一個任務交給一個線程
迭代范圍上界判斷是小於,所以需要加一
3. Parallel.ForEach
可以通過partitioner分區器進行分區,每一個迭代處理一個分區,Tuple<int,int>
退出
ParallelLoopState
Break: 不會馬上結束,執行完小於當前迭代的內容
Stop:盡快退出
ParallelLoopResult
IsCompleted 循環完成
!IsCompleted && !LowestBreakIteration.HasValue Stop終止
!IsCompleted && LowestBreakIteration.HasValue Break終止
AggregateException
.InnerExceptions內部異常集合
parallelOptions
maxDegreeoOfParallelism並行度
CancellationToken取消token
taskScheduler任務調度器
第三章 命令式並行任務並行
System.Threading.Tasks.Task
一個task代表一個異步操作,並不針對一個線程
狀態
TaskStatus.Created初始狀態
.WaitingForActivation依賴其他任務的任務的初始狀態
.WaitingToRun通過TaskFactory.StartNew所創建的任務的初始狀態
.Cancelled
.Faulted
.RunToCompletion
task.Start()
task.Wait() 等待也都有超時的重載
Task.WaitAll()
Task.TaskFactory.StartNew方法可以參數傳入cancellationToken,或者TaskCreationOptions
TaskCreationOption
.AttachedToParent與一個父任務關聯
.None默認行為
.LongRunning長時間操作,調度器可對其用粗顆粒度的操作,一般大於一秒
.PreferFairness告訴調度器,更早被調度的任務更早執行
task.ContinueWith延續任務
TaskContinuationOptions操作或者條件