Visual Studio 2010中Parallel类实现并行计算

2010-3-12    来源:51cto    我要评论
   | |

导读:在.NET Framework 4.0中,在库的层次上,微软提供了大量的新内容来帮助程序员完成应用程序的并行化,其中包括Parallel LINQ,Task Parallel Library和Coordination Data Structures,这里我们就先来介绍一下最简单最常用的TPL。

关键词:Visual Studio 2010 .NET Framework 4.0 并行计算

 
正在加载数据...

  将要跟随Visual Studio 2010一起发布的.NET Framework 4.0将包含很多基于库的对并行计算的支持,包括数据的并行化,任务的并行化等等,这一切都通过一个共同的工作调度器进行管理。

  这些新的类型和类,将在System.Threading,System.Threading.Tasks,System.Linq和System.Collections.Concurrent这些名字空间中提供。通过这些新的类型和类,开发人员将无需面对如今复杂的多线程开发模式,而可以直接使用.NET Framework,更加高效简便地开发支持并行计算的应用程序,从而更加充分地利用多核CPU的优势,随着计算核心或者处理器的增加,以提升应用程序的性能。

  而在.NET Framework中,Task Parallel Library (TPL)是其Parallel Extensions中一个重要组成部分,它提供了一种简便的多线程开发方式,通过它所提供的类或者函数,可以让程序员轻松地实现并行计算。其中,最简单的就是它的Parallel类

  Parallel类

  Parallel类就是TPL中的一个用于支持并行计算的类。Parallel类提供了诸多的静态函数,只需要简单的函数调用,我们就可以对常用的for循环,foreach循环进行并行化。下面我们通过一些实际的例子,来看看如何利用这个类将我们的应用程序并行化,以吃上多核这“免费的午餐”。

  创建示例项目

  为了演示如何将一个现有的项目并行化,我们需要先创建一个示例项目。在这个项目中,我们将模拟对数据的串行操作,然后介绍如何利用Parallel类将对数据的串行操作并行化,以充分利用多核CPU的优势,从而提升应用程序的性能。在Visual Studio 2010中,我们新创建一个Visual C#的控制台应用程序。然后在这个项目中添加一个类Employee,其实现代码如下:

以下是引用片段:
using System;
  using System.Collections.Generic;
  using System.Linq;
  using System.Text; 
 namespace ParallelDemo
   {   // 职员类
   public class Employee
   {   public string FirstName
   {   get;  set;   }
   public string LastName
   {   get;  set;   }
   public string Address
   {   get;  set;   } 
  public DateTime HireDate
   {   get;  set;   } 
  public int EmployeeID 
  {   get;  set;   } 
  // 模拟对数据的处理
   public static decimal Process(Employee employee)
   {   Console.WriteLine(”Processing {0}”, employee.EmployeeID); 
  // 产生一个随机数  // 用以表示处理当前数据需要的时间
  var rand = new Random(DateTime.Now.Millisecond);
  var delay = rand.Next(1, 5);
  var count = 0;
  var process = true;
  while (process)
   {   System.Threading.Thread.Sleep(1000);
   count++;
  if (count >= delay)  process = false;
   }   return delay;
   }   }   // 职员列表类
  // 这是我们需要处理的数据 
  public class EmployeeList : List
   {   public EmployeeList()   {   // 将职员添加到列表中
   Add(new Employee { EmployeeID = 1, FirstName = “张”, LastName = “三”, HireDate = DateTime.Parse(”1/1/2007″) });
  Add(new Employee { EmployeeID = 2, FirstName = “李”, LastName = “四”, HireDate = DateTime.Parse(”3/15/2006″) });  Add(new Employee { EmployeeID = 3, FirstName = “王”, LastName = “麻子”, HireDate = DateTime.Parse(”6/17/2005″) });  Add(new Employee { EmployeeID = 4, FirstName = “赵”, LastName = “匡胤”, HireDate = DateTime.Parse(”3/19/2000″) }); 
 Add(new Employee { EmployeeID = 5, FirstName = “钱”, LastName = “进”, HireDate = DateTime.Parse(”7/17/2003″) });
  Add(new Employee { EmployeeID = 6, FirstName = “孙”, LastName = “俊鹏”, HireDate = DateTime.Parse(”9/13/2005″) });  Add(new Employee { EmployeeID = 7, FirstName = “李”, LastName = “明”, HireDate = DateTime.Parse(”12/3/2002″) }); 
 Add(new Employee { EmployeeID = 8, FirstName = “周”, LastName = “大勇”, HireDate = DateTime.Parse(”7/1/2008″) });  Add(new Employee { EmployeeID = 9, FirstName = “吴”, LastName = “明子”, HireDate = DateTime.Parse(”1/7/2008″) }); 
 Add(new Employee { EmployeeID = 10, FirstName = “郑”, LastName = “邦万”, HireDate = DateTime.Parse(”11/1/2001″) });  Add(new Employee { EmployeeID = 11, FirstName = “王”, LastName = “朝”, HireDate = DateTime.Parse(”4/21/2006″) }); 
 Add(new Employee { EmployeeID = 12, FirstName = “冯”, LastName = “玛丽”, HireDate = DateTime.Parse(”7/19/2006″) });  Add(new Employee { EmployeeID = 13, FirstName = “陈”, LastName = “良乔”, HireDate = DateTime.Parse(”3/9/2001″) });  Add(new Employee { EmployeeID = 14, FirstName = “褚”, LastName = “春晖”, HireDate = DateTime.Parse(”7/15/2005″) });  Add(new Employee { EmployeeID = 15, FirstName = “卫”, LastName = “斯理”, HireDate = DateTime.Parse(”8/6/2003″) });  Add(new Employee { EmployeeID = 16, FirstName = “蒋”, LastName = “中正”, HireDate = DateTime.Parse(”5/18/2005″) });  Add(new Employee { EmployeeID = 17, FirstName = “沈”, LastName = “洋洋”, HireDate = DateTime.Parse(”8/5/2002″) });  Add(new Employee { EmployeeID = 18, FirstName = “韩”, LastName = “斌”, HireDate = DateTime.Parse(”10/1/2006″) }); 
 Add(new Employee { EmployeeID = 19, FirstName = “杨”, LastName = “雪”, HireDate = DateTime.Parse(”12/7/2002″) });  Add(new Employee { EmployeeID = 20, FirstName = “朱”, LastName = “辉”, HireDate = DateTime.Parse(”3/30/2001″) });  DateTime.Parse(”12/7/2002″) });
  Add(new Employee { EmployeeID = 20, FirstName = “朱”, LastName = “辉”, HireDate = DateTime.Parse(”3/30/2001″) });
   }
   }  
 }   

  } 
  } 


Visual Studio
 Visual Studio 2010鲜为人知的新特性
 Visual Studio 2010中Parallel类实现并行计算
 Visual Studio 2010 RC两个错误问题的解决方法
 辨析Visual Studio 2010 RC中WPF开发的改进
 详解Visual Studio 2010中的内置图表控件
 Visual Studio为云迁移进行扩展应用
 详解Visual Studio 2010中WF 4.0的应用
 微软为Visual Studio 2010和.NET 4扩展测试版
 Visual Studio 2010中调试并行应用程序(下)
 Visual Studio 2010中调试并行应用程序(上)
 Visual Studio 2010特性解析:初探ALM功能
 在Web服务中运用Visual Studio IDE
 VS 2010和.NET 4为微软Azure插上翅膀
 VS2010应成为微软.NET平台里程碑?
 如何同时安装VS 2010 RC和ASP.NET MVC 2 RC2
 VS.NET:通过Web服务瞄准电子商务
 分享好用的五大Visual Studio 2010扩展

原文出处:http://developer.51cto.com/art/201003/188220.htm
 
 
 
 
 
 

.NET Web服务

 
新语言、云计算以及亲身实践Android开发示范都是上周OSCON会议的一部分。著名谷歌分布式工程师Rob Pike探讨了日益复杂的计算语言,并且提到了如果比实际需要的还要复杂很多该如何?
 
随着Azure的成熟,IT 部门需要解决为微软云平台中开发的不同之处。部分微软工程师表示一些开发者也许并不习惯准备为大范围和联合安全访问创建服务……
 
Ruby开发人员还没有准备好完全地拥抱IronRuby,但是.NET开发人员已经发现使用该实施的数个好处。其中一个突出的用力就是使用IronRuby来测试.NET应用……
 
围绕.NET变成社区的沟壑长久以来难以从任何方向穿越。双方的开发人员都看到了IronRuby,一款适用于.NET的开源Ruby实现,将可能成为穿越点……
 
Mono Project本周发布Moonlight 2,Silverlight的开源Linux实施。微软回应Adobe Flash,Silverlight是创建在线和离线的富应用的框架……

热门技术手册排行

 

随着开源技术越来越成熟,一个稍有开发经验的人通过学习就可以用开源的产品和技术构建一套可用的系统。对于从事软件开发的人员,尤其是对Java或动态语言相关领域的人来说,“开源”也许是他们最喜爱的单词。但是,很多时候我们需要的不仅仅是一个可用的系统,而是希望这个系统开发更简易、性能更高和扩展性更好等。这确实是一个令人头痛的问题。本指南很多地方都是点到为止,要深入了解相关信息的读者请借助参考资料、网站等自行挖掘。

 

本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。

 

TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。

 

业务流程管理(business process management,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。

 

ESB(Enterprise Service Bus,企业服务总线)是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。

 

云计算的概念越来越流行,Amazon、Google和IBM是第一批将云计算引入公众视线的公司。云计算就是新的Web2.0,一种既有技术上的市场绽放。

查看更多
 
 

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
电子邮件地址:
请输入您的电子邮件地址
密码:
下次自动登录