C#並行程式設計-相關概念

世紀緣發表於2017-03-23

菜鳥初步學習,不對的地方請大神指教,參考《C#並行程式設計高階教程.pdf》

目錄

背景

當今計算機至少都有一顆雙核的微處理器,帶有四核、八核的計算機非常常見,在單個處理器上具有多個核心的時代正在來臨,現代微處理器提供了新型的多核架構,因此軟體設計和編碼能夠充分發揮這些架構的功能是非常重要的事情,也要與時俱進。

多核微處理器

多核微處理器有很多種不同的複雜微架構,意在提供更強的並行執行能力,提升吞吐量,減少潛在的效能瓶頸,縮減電源消耗,並減少發熱量,因此,現代很多的微處理器可以根據工作負載提升或降低每個核心的時脈頻率,甚至可以將不在使用中的核心進入睡眠狀態,等需要這些核心的時候,作業系統又會喚醒它們。

硬體執行緒與軟體執行緒

多核處理器帶有一個以上的物理核心,每個物理核心都可能會提供多個硬體執行緒,也稱之為邏輯核心或者邏輯處理器。

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.cnblogs.com/woxpp/p/3924476.html
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線。

相關文章