C#並行程式設計-相關概念
菜鳥初步學習,不對的地方請大神指教,參考《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
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線。
相關文章
- Dart 非同步程式設計相關概念簡述Dart非同步程式設計
- (轉)執行計劃相關概念
- 【系統設計】併發相關概念
- parallel並行度的相關操作、概念、引數解釋Parallel並行
- 併發程式設計-6.並行程式設計概念程式設計並行行程
- rust程式設計(3)結構體相關概念和疑問Rust程式設計結構體
- 多執行緒程式設計相關理論執行緒程式設計
- 好程式設計師Java學習路線分享JVM相關概念程式設計師JavaJVM
- C#多執行緒學習(一) 多執行緒的相關概念C#執行緒
- C# 多執行緒學習(1) :多執行緒的相關概念C#執行緒
- C#並行Parallel程式設計模型實戰技巧手冊C#並行Parallel程式設計模型
- 深入C#並行程式設計(1) -- 瞭解執行緒C#並行行程程式設計執行緒
- Java 多執行緒 相關概念Java執行緒
- C#並行,多執行緒程式設計並行集合和PLINQ的例項講解並行執行緒程式設計
- C#並行程式設計:Parallel的使用C#並行行程程式設計Parallel
- 國際化程式設計中Locale相關概念的一些解釋程式設計
- 並行概念並行
- Docker相關概念Docker
- Scrum相關概念Scrum
- 關於 Angular 程式設計中的 shim 概念Angular程式設計
- 『現學現忘』Docker相關概念 — 1、雲端計算概念Docker
- C#多執行緒(四)並行程式設計篇之結構化C#執行緒並行行程程式設計
- 帶你輕鬆接觸Oracle執行計劃的相關概念Oracle
- JS的相關概念JS
- C#多執行緒程式設計C#執行緒程式設計
- 計算機指令集的相關概念計算機
- 程式設計師的相關笑話(一)程式設計師
- 一些程式設計相關的分享程式設計
- 記錄shell指令碼程式設計相關指令碼程式設計
- 5天玩轉C#並行和多執行緒程式設計 —— 第二天 並行集合和PLinqC#並行執行緒程式設計
- 5天玩轉C#並行和多執行緒程式設計 —— 第五天 多執行緒程式設計大總結C#並行執行緒程式設計
- java多執行緒程式設計,Thread,Runnable,Future相關知識Java執行緒程式設計thread
- [譯] 用 Python 程式設計進行糖尿病相關的機器學習Python程式設計機器學習
- (Python程式設計 | 系統程式設計 | 並行系統工具 | 程式退出)Python程式設計並行
- PostgreSQL並行查詢相關配置引數SQL並行
- 執行緒同步(C#程式設計指南)執行緒C#程式設計
- docker相關概念筆記Docker筆記
- Java併發相關概念Java