并行编程 | Personal Blog

并行编程

并行

同时执行多个任务,在多个内核中真正地同时执行任务

多个线程被分配到不同的CPU,同一时刻有多个线程获得CPU

并发

宏观上并行,微观上串行;多个线程被一个CPU交替执行

System.Threading.Tasks.Parallel类(数据并行)

计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于全部或部分的内部处理单元所存的数据同时操作。

For 方法

//For(int fromInclusive,int toExclusive,Action<int>body)
//      开始索引(包含)结束索引(不包含)Action委托
Parallel.For(0,20,(i)=>Method(i))
// 循环调用20次Method方法

//For(int fromInclusive,int toExclusive,ParallelOptions parallelOptions,Action<int>body)
//提供选项

ParallelOptions option =new ParallelOptions();//创建对象
option.MaxDegreeOfParallelism = 16;
For(0,n,option,action2)

//并行选项
//ParallelOptions 类:
//CancellationToken方法:获取或设置取消标志
//MaxDegreeOfParallelism:获取或设置此ParallelOptions实例所允许的最大并行度,即限制将使用多少并发任务
//TaskScheduler:获取或设置与此ParallelOptions实例关联的任务调度策略

For(int fromInclusive,int toExclusive,Action<int,ParallelLoopState>body)
//ParallelLoopState类:
//Break方法:终止For循环(迭代),每一个内核正在执行的方法执行完毕后不再继续执行剩余的迭代过程
//Stop方法:终止For循环(迭代),并终止每一个内核正在执行的方法,且不再继续执行剩余的迭代过程

//ParallelLoopResult类:
//IsCompleted方法:获取该循环是否执行完毕

ConsurrentBag<T> 并发包

System.Collections.Concurrent 类似List<T>结构,适用于多任务并发

Invoke 方法(任务并行)

任务并行指同时运行一个或多个独立的任务,而且并行的任务都是异步执行的

Parallel.Invoke 方法

Public static void Invoke(Action[] actions)