`
pcajax
  • 浏览: 2162547 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Net 4.0并行库实用性演练

阅读更多

引言

随着CPU多核的普及,编程时充分利用这个特性越显重要。上篇首先用传统的嵌套循环进行数组填充,然后用.NET 4.0中的System.Threading.Tasks提供的Parallel Class来并行地进行填充,最后对比他们的性能。本文将深入分析Parallel Class并借机回答上篇9楼提出的问题,而System.Threading.Tasks分析,这个将推迟到.NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(三)中介绍。内容如下:

  • 1、Parallel Class
    • 1.1、For方法
    • 1.2、ForEach方法
    • 1.3、Invoke方法
  • 2、并发控制疑问?
    • 2.1、使用Lock锁
    • 2.2、使用PLINQ——用AsParallel
    • 2.3、使用PLINQ——用ParallelEnumerable
    • 2.4、使用Interlocked操作
    • 2.5、使用Parallel.For的有Thread-Local变量重载函数
  • 性能比较

1、Parallel Class

Parallel——这个类提供对通常操作(诸如for、foreach、执行语句块)基于库的数据并行替换。它只是System.Threading.Tasks命名空间的一个类,该命名空间中还包括很多其他的类。下面举个例子来说明如何使用Parallel.For(来自MSDN):

01 using System.Threading.Tasks;   
02 class Test
03 {
04     static int N = 1000;
05   
06     static void TestMethod()
07     {
08         // Using a named method.
09         Parallel.For(0, N, Method2);
10   
11         // Using an anonymous method.
12         Parallel.For(0, N, delegate(int i)
13         {
14             // Do Work.
15         });
16   
17         // Using a lambda expression.
18         Parallel.For(0, N, i =>
19         {
20             // Do Work.
21         });
22     }
23   
24     static void Method2(int i)
25     {
26         // Do work.
27     }
28 }

上面这个例子简单易懂,上篇我们就是用的Parallel.For,这里就不解释了。其实Parallel类的方法主要分为下面三类:

  • For方法
  • ForEach方法
  • Invoke方法

1.1、For方法

在里面执行的for循环可能并行地运行,它有12个重载。这12个重载中Int32参数和Int64参数的方法各为6个,下面以Int32为例列出:

下面代码演示了For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action<Int32> body)方法(来自MSDN):

1.2、ForEach方法

在迭代中执行的foreach操作可能并行地执行,它有20个重载。这个方法太多,但用法大概跟For方法差不多,请自行参考MSDN

1.3、Invoke方法

提供的每个动作可能并行地执行,它有2个重载。

例如下面代码执行了三个操作(来自MSDN):

2、并发控制疑问?

有人提出以下疑问:“如果For里面的东西,对于顺序敏感的话,会不会有问题。并行处理的话,说到底应该是多线程。如果需要Lock住什么东西的话,应该怎么做呢?例如这个例子不是对数组填充,是对文件操作呢?对某个资源操作呢?”

关于对顺序敏感的话,也就是说该如何加锁来控制?下面我举个例子来说明:对1~1000求和。如果我们想上篇那样简单地用Parallel.For,将会产生错误的结果,代码如下:

01 using System;
02 using System.Collections.Generic;
03 using System.Linq;
04 using System.Text;
05 using System.Threading;
06 using System.Threading.Tasks;
07   
08 namespace ConsoleApplication2
09 {
10     class Program
11     {        
12         static void Main(string[] args)
13         {
14             int loops=0;
15             while (loops <= 100)
16             {
17                 long sum = 0;                
18                 Parallel.For(1, 1001, delegate(long i)
19                 {
20                     sum += i;
21                 });
22                 System.Console.WriteLine(sum);
23                 loops++;
24             }
25         }
26     }
27 }

在上述代码中,为了校验正确性我进行了重复做了100次,得出如下结果:

border-right-width: 0px; display: block;

评论

相关推荐

    NET4.0并行计算技术基础

    PLINQ是.NET 4.0中的并行查询库,它扩展了LINQ(Language Integrated Query)以支持并行查询。PLINQ自动识别数据源是否支持并行处理,并在可能的情况下,使用多线程加速查询。开发者可以通过简单地添加一个....

    Microsoft .NET Framework 4.0运行库

    8. **并发和并行计算**:.NET Framework 4.0引入了Task Parallel Library(任务并行库),使得开发者可以更容易地利用多核处理器进行并发编程。此外,还有Parallel LINQ(PLINQ)提供并行查询的支持。 9. **垃圾...

    “.NET 4.0并行计算技术基础”系列文章及源代码

    本技术资源包括了我在博客上发表的“.NET 4.0并行计算技术基础”系列文章中的所有示例源码,并包含一个PDF,汇总了所有文章。 与作者互动请访问http://blog.csdn.net/bitfan/archive/2009/10/26/4728180.aspx 更多...

    comsol 4.0 cluster 并行计算培训课程

    ### comsol 4.0 cluster 并行计算培训课程知识点详解 #### 一、课程概述 本培训课程主要针对COMSOL Multiphysics 4.0版本中的集群并行计算功能进行详细介绍。通过该课程的学习,学员将能够掌握如何利用Windows HPC ...

    微软C#4.0示例库

    2. **可空类型(Nullable Types)**:C# 4.0中对所有值类型都支持可空性,这在处理可能为null的变量时非常实用。例如,`int?`表示一个可以为null的整数。 3. **泛型协变和逆变(Generic Covariance and ...

    NET3.5、NET4.0、NET4.5、NET4.6、Win10-NET3.5.rar

    总的来说,这个压缩包包含了从.NET 3.5到.NET 4.6的重要版本,它们各自在.NET框架的发展历程中扮演了关键角色,提供了丰富的开发工具和库,帮助开发者构建各种类型的桌面、Web和移动应用程序。无论是进行旧项目的...

    .NET 4.0中的并行性简介

    本文将详细介绍.NET 4.0中并行性相关的三个关键概念:Parallel LINQ (PLINQ),Task Parallel Library (TPL) 和 Reactive Extensions (Rx)。 **Parallel LINQ (PLINQ)** PLINQ是并行查询语言,它是LINQ(Language ...

    NET Framework 4.0 离线安装包_x86_x64

    .NET Framework 4.0是微软开发的一个重要软件框架,它为开发者提供了构建、运行Windows应用程序所需的类库和服务。这个框架自2010年发布以来,已经成为许多Windows应用的基础,尤其是那些基于C#、VB.NET或其他.NET...

    net framework 4.0

    .NET Framework 4.0 是该框架的一个重要版本,它引入了许多新特性,包括但不限于改进的并行处理能力、增强的安全性和更好的性能优化。对于开发者来说,了解如何正确安装 .NET Framework 4.0 至关重要,尤其是在遇到...

    NetFramework4.0.30319.rar

    下载并安装"NetFramework4.0.30319.exe"文件,即可将.NET Framework 4.0.30319添加到您的系统中,为运行依赖该版本的应用程序提供必要支持。请确保在安装前检查系统兼容性和任何可能的更新,以保证最佳的运行效果。...

    Newtonsoft.Json.dll-Net2.0-Net4.0-Net4.5

    .NET Framework 4.0 是一个重要的更新,引入了许多新特性和性能改进,如任务并行库(TPL)、动态语言运行时(DLR)以及改进的垃圾回收机制。对于那些使用 .NET 4.0 开发的应用程序,压缩包提供的 Net4.0 文件版本...

    .NET4.0离线安装包

    此版本引入了C# 4.0和VB.NET 10.0语言的更新,带来了动态类型、多语言互操作性(也称为“DLINQ”)和命名参数等新功能。此外,.NET Framework 4.0还包含了Windows Communication Foundation (WCF)、Windows Workflow...

    HCIA华为智能计算最新V4.0题库.pdf

    5. 智能计算的定义之一是打破CPU处理复杂应用的边界,意味着在服务器集群中处理大规模并行计算任务。 6. GPU(图形处理器)通常用于视频图像处理和高性能计算(HPC)场景,例如HPC混合应用高吞吐量场景和HPC高性能...

    .net 4.0版本资源

    .NET Framework 4.0的并行计算库(TPL)使得开发者可以轻松利用多核硬件的潜力,通过任务并行、数据并行和并发集合等功能实现高效的多线程编程。 8. **内存管理优化**: .NET 4.0改进了垃圾回收机制,减少了对...

    .NET-4.0中的并行开发.docx

    总的来说,.NET 4.0的并行库提供了一套全面的工具,使开发者能够构建高性能的多线程应用,同时减少了对底层线程管理和同步的复杂性。然而,为了充分发挥并行编程的潜力,理解并考虑到数据竞争、上下文切换、任务调度...

    NET Framework 4.0

    此外,4.0版本引入了改进的性能和新的编程模型,例如并行计算支持,这使得开发者能够充分利用多核处理器的优势。 在文件列表中,"dotNetFx40_Client_x86_x64.exe"是.NET Framework 4.0的客户端版本安装程序,它包含...

    xp安装net framework4.0

    10. **更新和维护**:安装完成后,保持.NET Framework 4.0的更新至关重要,以确保系统的安全性和稳定性。微软会定期发布安全更新和修复补丁,需要密切关注并安装。 总的来说,XP用户可以通过以上步骤安装.NET ...

    MyTools-V7.0(NET4.0)

    《MyTools-V7.0(NET4.0)——基于.NET Framework 4.0的实用工具集合》 MyTools-V7.0是一款专为.NET Framework 4.0平台设计的实用工具集,它包含了多种功能丰富的工具,旨在帮助用户解决日常工作中遇到的各种问题。...

Global site tag (gtag.js) - Google Analytics