当前位置:首页 > Windows程序 > 正文

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

2021-03-29 Windows程序

第二章 命令式数据并行

几种并行类型:

数据并行

任务并行

流水线

在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默认行为

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69578.html