C#多核心变成 利用多核心优势并行计算

第二章 命令式数据并行

几种并行类型:

数据并行

任务并行

流水线

 

在System.threading.tasks.parallel下

parallel.for

parallel.foreach(可以自定义parytitioner)

parallel.invoke

 

1. Parallel.Invoke

没有特定执行顺序

交错并发:逻辑内核通过时间片机制和快速上下文切换实现并行的假象

并发:不解释

 

热点:潜在的可并行代码

加速比:串行执行时间/并行执行时间

 

2. Parallel.for

每一次迭代一会当作一个任务交给一个线程

迭代范围上界判断是小于,所以需要加一

 

3. Parallel.ForEach

可以通过partitioner分区器进行分区,每一个迭代处理一个分区,Tuple

 

退出

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操作或者条件

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

转载于:https://www.cnblogs.com/ftchen/p/4657896.html

你可能感兴趣的:(c#)