首页 > Python基础教程 >
-
C#教程之并行编程
读<C#并发编程经典实例.PDF>总结:
如果程序中存在大量的计算任务,并且这些任务能够分割成几个独立的任务块,那么就应该使用并行编程。
并行编程可提高CPU利用率。
通常情况下,服务器程序不适合并行编程。大多数服务器本身就具有并行能力,在服务器上进行并行编程,将降低本身的并行处理能力,不会有实际的好处。
并行编程分类:1、数据并行 2、任务并行
数据并行是指有大量的数据需要处理,并且每一块数据的处理过程是彼此独立的。
任务并行是需要执行大量任务,并且每个任务的执行过程是基本独立的。
数据并行的几种做法:
1、使用 Parallel.ForEach 方法
2、使用 PLINQ,它为LINQ 查询提供了 AsParallel 扩展。
比较:跟PLINQ 相比,Parallel 对资源更加友好,Parallel 与系统中的其他进程配合得比较好 , 而PLINQ 会试图让所有的 CPU 来执行本进程。
Parallel 的缺点是它太明显。很多情况下,PLINQ 的代码更加优美。
并行处理有一个非常重要的准则:每个任务块要尽可能的互相独立。 只要任务块互相独立,并行的性能就能做到最优。一旦在多个线程中共享状态,必须以同步方式访问程序的状态时,程序的并行性就变差了。
任务并行中使用一个Task来表示任务。
并行任务错误处理:
由于操作是并行处理的,多个异常就会同时发生。系统会把这些异常封装在 AggregateException 类中,在程序中抛出代码。
AggregateException 类型有几个实用的 Flatten 和 Handle 方法,用来简化错误处理的代码:
try { Parallel.Invoke(() => { throw new Exception(); }, () => { throw new Exception(); }); } catch (AggregateException ex) { ex.Handle(exception => { Trace.WriteLine(exception); return true; // “已经处理” }); }