知识大全 VS2010中Parallel类实现并行计算

Posted 项目

篇首语:犀渠玉剑良家子,白马金羁侠少年。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 VS2010中Parallel类实现并行计算相关的知识,希望对你有一定的参考价值。

VS2010中Parallel类实现并行计算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  将跟随Visual Studio 一起发布的 NET Framework 将包含很多基于库的对并行计算的支持 包括数据的并行化 任务的并行化等等 这一切都通过一个共同的工作调度器进行管理 这些新的类型和类 将在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 中 我们新创建一个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 employee EmployeeID);

  // 产生一个随机数

  // 用以表示处理当前数据需要的时间

  var rand = new Random(DateTime Now Millisecond);

  var delay = rand Next( );

  var count = ;

  var process = true;

  while (process)

  

  System Threading Thread Sleep( );

  count++;

  if (count >= delay)

  process = false;

  

  return delay;

  

  

  // 职员列表类

  // 这是我们需要处理的数据

  public class EmployeeList : List

  

  public EmployeeList()

  

  // 将职员添加到列表中

  Add(new Employee EmployeeID = FirstName = 张 LastName = 三 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 李 LastName = 四 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 王 LastName = 麻子 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 赵 LastName = 匡胤 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 钱 LastName = 进 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 孙 LastName = 俊鹏 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 李 LastName = 明 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 周 LastName = 大勇 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 吴 LastName = 明子 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 郑 LastName = 邦万 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 王 LastName = 朝 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 冯 LastName = 玛丽 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 陈 LastName = 良乔 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 褚 LastName = 春晖 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 卫 LastName = 斯理 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 蒋 LastName = 中正 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 沈 LastName = 洋洋 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 韩 LastName = 斌 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 杨 LastName = 雪 HireDate = DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 朱 LastName = 辉 HireDate = DateTime Parse( / / ) );

  DateTime Parse( / / ) );

  Add(new Employee EmployeeID = FirstName = 朱 LastName = 辉 HireDate = DateTime Parse( / / ) );

  

  

  

  

  

cha138/Article/program/net/201311/11645

相关参考