.NET 4 並行(多核)編程系列之一入門介紹
本系列文章將會對.NET 4中的並行編程技術(也稱之為多核編程技術)以及應用作全面的介紹。
本篇文章的議題如下:
1. 並行編程和多線程編程的區別。
2. 並行編程技術的利弊
3. 何時採用並行編程
系列文章連結:
.NET 4 並行(多核)編程系列之一入門介紹
.NET 4 並行(多核)編程系列之二 從Task開始
.NET 4 並行(多核)編程系列之三 從Task的取消
.NET 4 並行(多核)編程系列之四 Task的休眠
.NET 並行(多核)編程系列之五 Task執行和異常處理
.NET 並行(多核)編程系列之六 Task基礎部分完結篇
.NET 並行(多核)編程系列之七 共用資料問題和解決概述
1.並行編程和多線程編程的區別。
1.1並行編程。
現在隨著多核電腦的普及,並行編程技術,也就是多核編程技術也逐漸稱為開發的主流。為此,在.NET 4 中就引入了“並行編程”。在.NET 4 中一些列的Library和類為並行編程提供了支援,如: Task Parallel Library,Parallel LINQ等。
其實在.NET 1.0中就有了並行編程技術的一些實現---多線線程技術。多線程最大的問題就是難於使用和管理。在使用多線程的使用,因為它的複雜性,往往使用我們把注意力分散了多線程上。而致使我們的最初目的被掩蓋了。
1.2 比較區別
在.NET 4中提出的並處編程的底層機制其實還是基於多線程的。但是他們之前最大的區別就是.NET 4中的並行編程更加方便。
在傳統的編程模型中,程式員負責建立線程,為線程分配任務,管理線程。一個形象的比喻:你擁有一批士兵,然後你對他們下達命令,之後,你就必須時刻監視你的那些士兵,確保他們按照你的意圖辦事。(很累吧!)
在.NET 4中的並行編程是依賴Task Parallel Library(後面簡稱為TPL) 實現的。在TPL中,最基本的執行單元是task(中文可以理解為"任務"),一個task就代表了你要執行的一個操作。你可以為你所要執行的每一個操作定義一個task,TPL就負責建立線程來執行你所定義的task,並且管理線程。TPL是面向task的,自動的;而傳統的多線程是以人工為導向的。
Task機制使得我們把注意力關注在我們要解決的問題上面。如果之前的多線程技術使得我們放棄了一些並行編程的使用,那麼.NET 4中的新的並行編程技術可以讓我們重建立立信心。
雖然有了新的並行技術,但是傳統的多線程的技術還是很有用的。當我們使用TPL中的並行技術的時候來執行多個task的時候,我們不用在關心底層建立線程,管理線程等。
2. 並行編程技術的利弊
使用並行技術最大的好處就是提高了系統的效能。平行處理過程一般是這樣的:一個要執行的任務被拆分為很多很小的部分,然後這些很小的部分就分別在不同處理器(可以是多核的一台電腦,也可以使很多的電腦)上執行。因為這些很多很小的部分同時在執行,所以稱之為"並行"。
使用並處編程的時候需要考慮下面的問題:
1.開銷問題。
並存執行不是免費的,也是要開銷的。在並行運行開始和管理都是需要開銷的,就類比線上程的建立和管理一樣。在程式中,你要執行的任務越多,那麼使用並行的效果就越好。
2. 資料的協調
如果在並存執行的那些小部分需要共用公用的資料,那麼我們就要協調。一般來說,需要協調的資料越多,並存執行的效能損耗就越大。如果執行各個小部分之間都是獨立的,那麼我們就不用協調了。但是很多的時候,我們都是需要協調的。而且協調的技術也不是很難,在之後的文章中會一一講述。
3.效能提高多少
增加一台電腦的CPU可能會提高程式的運行速度,但是不是絕對的。我們知道,一個應用程式在單核的電腦上啟動並執行時間不一定(往往也不是)雙核電腦的
1/2.所以,採用並行編程不一定就一定會成倍的提高程式的效能。因為效能與很多的因數有關的,硬體就是很大的因數。
3. 何時採用並行編程
建議:如果一個問題能夠用並行編程解決,那麼就用,否則就不用。聽起來好像是廢話,但是確實是一個很不錯的建議。因為並行編程也不是萬能的,也只能
解決一類的問題,所以在用之前要分析問題了。如果一個問題確實能夠用並行的方案來解決,但是有很多的因數影響,如之前我們提到的一些問題。權衡使用之後的開銷和好處在決定是否使用。後續文章會給出很多的例子。
今天暫時寫到這裡吧,理論講了一大堆的,希望園裡的朋友見諒啊!從下篇開始就用code+講解的形式。
註:很長時間沒有寫東西了, :),希望大家見諒!
著作權為小洋和部落格園所有,轉載請標明出處給作者。
http://www.cnblogs.com/yanyangtian