菜鳥初步學習,不對的地方請大神指教,參考《C#并行編程高級教程.pdf》
C#并行編程-相關概念
C#并行編程-Parallel
C#并行編程-Task
C#并行編程-并發集合
C#并行編程-線程同步原語
C#并行編程-PLINQ:聲明式數據并行
背景
當今計算機至少都有一顆雙核的微處理器,帶有四核、八核的計算機非常常見,在單個處理器上具有多個內核的時代正在來臨,現代微處理器提供了新型的多核架構,因此軟件設計和編碼能夠充分發揮這些架構的功能是非常重要的事情,也要與時俱進。
多核微處理器
多核微處理器有很多種不同的復雜微架構,意在提供更強的并行執行能力,提升吞吐量,減少潛在的性能瓶頸,縮減電源消耗,并減少發熱量,因此,現代很多的微處理器可以根據工作負載提升或降低每個內核的時鐘頻率,甚至可以將不在使用中的內核進入睡眠狀態,等需要這些內核的時候,操作系統又會喚醒它們。
硬件線程與軟件線程
多核處理器帶有一個以上的物理內核,每個物理內核都可能會提供多個硬件線程,也稱之為邏輯內核或者邏輯處理器。
Windows中每個運行的程序都是一個進程(PRocess),每個進程都會創建并運行一個或者多個線程,也被稱為軟件線程(software thread),在一個進程當中只要有一個線程,這個線程我們稱之為主線程(main thread)。
操作系統的調度器在所有要運行的進程和線程之間公平的分享可用的處理資源,給每一個軟件線程分配處理時間,當Windows調度器運行在多核微處理器上時,調度器必須從物理內核支持的硬件線程中分配時間給一個需要運行指令的軟件線程。
Windows將每一個硬件線程識別為一個可調度的邏輯處理器,每一個邏輯處理器可以運行軟件線程代碼,運行多個軟件線程的進程可以充分發揮硬件線程和物理內核的優勢,并行地運行指令。Windows會給每一個可用的硬件線程分配一塊塊的處理時間,并通過這種方式運行上百個千個軟件線程。
基于任務的并行化設計規則
1.將每個問題分為很多子問題,不需要考慮子問題任務的執行順序(能夠以并行方式處理的數據,能夠以某種復雜的并行化處理的數據流等)
2.考慮不用問題連接起來的必要性,需要避免任務與任務之間的依賴性。
3.減少任務與任務之間的臨界區。
并行任務的利與弊
1.并行任務的運行和管理都是需要開銷的,在程序中需要執行的任務越多,并行的效果越好。
2.并行任務中對于共享的資源或數據越多,對并行任務的執行性能損耗越大,如果每個任務的資源都是獨立存在的,性能會好很多。
多線程
多線程是指從軟件或者硬件上實現多個線程并發執行的技術,具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升處理能力。
多線程與并行計算區別 參考http://blog.csdn.net/delacroix_xu/article/details/5928121
本質上沒有區別,多線程的作用不只是并行計算,還有其他的作用(如降低阻塞,在單核時代,多線程的這個消除阻塞的作用我們稱之為“并發”,這和并行本質上是不同的 )
并行計算還可以通過其他的手段來獲得,多線程只是其中一種方式(如多進程)
寫的有點亂,大家稍微講究著看下,主要是windows調度器,多核微處理器,硬件線程,軟件線程之間的關系 以及 并行任務開發的良好的約束,不對的地方希望大家指正
作者:釋迦苦僧 出處:http://www.companysz.com/woxpp/p/3924476.html本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。
|
新聞熱點
疑難解答