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