zoukankan      html  css  js  c++  java
  • 并行编程

    读<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; // “已经处理”
         });
     }                    
  • 相关阅读:
    上下文有关文法
    sqlserver cte 速度慢
    hibernate tools eclipse 安装
    sts java nullpointer exception
    Oracle RAC集群体系结构
    bean scope scoped-proxy
    hibernate persist不能插入到表中
    system.out 汉字乱码
    NoSQL数据库(转)
    在PowerShell中获取本地的RAM信息(容量)
  • 原文地址:https://www.cnblogs.com/tangchun/p/9138486.html
Copyright © 2011-2022 走看看