Visual Studio 2010中Parallel類實現并行計算

發表于:2010-03-26來源:作者:點擊數: 標簽:ParallelStudioVisualvisualstudio
Visual Studio 2010中Parallel類實現并行計算 軟件測試 在.NET Framework 4.0中,在庫的層次上,微軟提供了大量的新內容來幫助 程序員 完成應用程序的并行化,其中包括Parallel LINQ,Task Parallel Library和Coordination Data Structures,這里我們就先來

  Visual Studio 2010中Parallel類實現并行計算  軟件測試 

   在.NET Framework 4.0中,在庫的層次上,微軟提供了大量的新內容來幫助程序員完成應用程序的并行化,其中包括Parallel LINQ,Task Parallel Library和Coordination Data Structures,這里我們就先來介紹一下最簡單最常用的TPL。

  將要跟隨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″) }); } } } } } }

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97