Atitit.併發編程原理與概論 attilax總結

 

 

Atitit.併發編程原理與概論 attilax總結html

 

 

1. 併發通常涉及以下幾個方面:2c++

2. 線程安全性  2.2 原子性    2.3 加鎖機制2程序員

2.1. 線程封閉3.3.1Ad-hoc線程封閉   3.3.2 棧封閉   3.3.3ThreadLocal2算法

3. 異步2編程

4. 同步與鎖關鍵字2c#

5. 5.2 併發容器併發集合2promise

6. Future模式 2緩存

7. 5.3 阻塞隊列和生產者-消費者模式5.3.2 串行線程封閉 5.3.3 雙端隊列與工做密取 2安全

8. 5.4 阻塞方法與中斷方法 2數據結構

9. 5.5 同步工具類 5.5.1 閉鎖 5.5.2FutureTask5.5.3 信號量 5.5.4 柵欄 3

10. 5.6 構建高效且可伸縮的結果緩存3

11. 線程池3

12. 7.1 任務取消3

13. 任務並行庫(TPL) 4

14. 死鎖的避免與診斷4

15. 原子變量與非阻塞同步機制4

16. 協程4

17. 異步、多線程、任務、並行的本質4

18. 如今,該用什麼來編寫多線程 5

18.1.1. 1,異步編程5

19. 響應式編程6

20. ,數據流編程6

20.1. 5Actor模型7

21. Qa7

22. Java c# .net c++的併發技術7

22.1. Java併發編程實戰(第16Jolt大獎提名圖書,Java併發編程必讀佳做8

22.2. Java併發技術8

22.3. C#多線程編程實戰( ((美...8

22.4. Line 278:   《C++併發編程實戰》 Line 285: 1章 你好,C++併發世界9

22.5. C#併發編程經典實例》9

1. 併發通常涉及以下幾個方面:

1. 多線程編程(已過期,不介紹)

2. 異步編程

3. 並行編程

4. 響應式編程

5. 數據流編程

 

2. 線程安全性  2.2 原子性    2.3 加鎖機制

 

2.1. 線程封閉3.3.1Ad-hoc線程封閉   3.3.2 棧封閉   3.3.3ThreadLocal

 

3. 異步

4. 同步與鎖關鍵字

5. 5.2 併發容器併發集合

6. Future模式

做者:: 綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 

漢字名:艾提拉(艾龍)   EMAIL:1466519819@qq.com

轉載請註明來源: http://www.cnblogs.com/attilax/

 

7. 5.3 阻塞隊列和生產者-消費者模式5.3.2 串行線程封閉 5.3.3 雙端隊列與工做密取

8. 5.4 阻塞方法與中斷方法

9. 5.5 同步工具類 5.5.1 閉鎖 5.5.2 FutureTask   5.5.3 信號量 5.5.4 柵欄

10. 5.6 構建高效且可伸縮的結果緩存

11. 線程池

第8章 線程池的使用
8.1 在任務與執行策略之間的隱性耦合
8.1.1 線程飢餓死鎖
8.1.2 運行時間較長的任務
8.2 設置線程池的大小
8.3 配置ThreadPoolExecutor
8.3.1 線程的建立與銷燬
8.3.2 管理隊列任務
8.3.3 飽和策略
8.3.4 線程工廠

 

 

12. 7.1 任務取消


7.1.1 中斷
7.1.2 中斷策略
7.1.3 響應中斷
7.1.4 示例:計時運行
7.1.5 經過Future來實現取消
7.1.6 處理不可中斷的阻塞
7.1.7 採用newTaskFor來封裝非標準的取消
7.2 中止基於線程的服務
7.2.1 示例:日誌服務
7.2.2 關閉ExecutorService
7.2.3 「毒丸」對象
7.2.4 示例:只執行一次的服務
7.2.5 shutdownNow的侷限性
7.3 處理非正常的線程終止

13. 任務並行庫(TPL)

14. 死鎖的避免與診斷

15. 原子變量與非阻塞同步機制

16. 協程

17. 異步、多線程、任務、並行的本質

這四個概念對應在CLR中的本質,本質都是多線程。

異步,簡單的講就是BeginInvokeEndInvoke模式,它在CLR內部線程池進行管理;

多線程,體如今C#中,能夠由類型Thread發起。也能夠由ThreadPool發起。前者不受CLR線程池管理,後者則是。FCL團隊爲了各類編程模型的方便,還另外提供了BackgroundWorker和若干個Timer,基本上它們都是ThreadPool的增強,增長了一些和調用者線程的交互功能;

任務(Task),爲FCL4.0新增的功能,在一個稱之爲任務並行庫(TPL)的地方,其實也就是System.Threading.Tasks命名空間下。任務並行庫名字取的很玄乎,其實它也是CLR線程池的增強。優化了線程間的調度算法,增長了和調用者線程的交互功能;

並行(Parallel),爲FCL4.0新增的功能,也屬於TPL。並行在後臺使用Task進行管理,說白了,由於Task使用的線程池線程,因此Parallel天然使用的也是線程池線程進行管理,它的本質僅僅是進一步簡化了Task。在這裏要增進一個對於並行的理解。實際上,多線程自然就是並行的。及時不用任務並行庫,用Thread類型新起兩個線程,CLR或者說Windows系統也會將這兩個線程根據須要安排到兩個CPU上去執行。因此,並非由於多了任務並行庫,CLR才支持並行計算,任務並行庫只是提供了一組API,使咱們可以更好的操縱線程進行並行開發而已。

 

18. 如今,該用什麼來編寫多線程 

若是你在FRAMEWORK4.0下編寫代碼,那麼應該按照這個優先級來撰寫多線程代碼: 

優先

次優先

不得以

Parallel(含擴展庫PLinq

Task

ThreadPoolBackgroundWorkerTimer

異步

Thread

這個表知足了大部分狀況下的一個優先級指導,但在某些狀況下會有例外。

多線程編程(已過期,不介紹)

18.0.1. 1,異步編程

異步編程就是使用future模式(又稱promise)或者回調機制來實現(Non-blocking on waiting)。

微軟還特地把異步編程分做了3種不一樣的模型:基於任務的模式(TAP)就是我上面推薦的這種,基於事件的模式(EAP)和異步編程模型(APM)我上面不推薦的事件和回調。

 

19. 響應式編程

響應式編程最近成爲了一個Buzzword,其實微軟6年前就開始給.NET提供一個Reactive 
Extensions
了。一開始要理解響應式編程有點困難,可是一旦理解了,你就會對它的強大功能愛不釋手。簡單來講,響應式編程把事件流看做數據流,不過數據流是從IEnumable中拉取的,而數據流是從IObservable推送給你的。爲何響應式編程能夠實現併發呢?這是由於Rx作到線程不可知,每次事件觸發,後續的處理會從線程池中任意取出一個線程來處理。且能夠對事件設置窗口期和限流。舉個例子,你能夠用Rx來讓搜索文本框進行延遲處理(而不用相似我很早的時候用個定時器來延遲了)。

20. ,數據流編程

數據流(DataFlow)編程可能你們就更陌生了,不過仍是有些經常使用場景可使用數據流來解決。數據流實際上是在任務並行庫(TPL)上衍生出來的一套處理數據的擴展(也結合了異步的特性),TPL也是處理並行編程中任務並行和數據並行的基礎庫。

望文生義,TPL DataFlow就是對數據進行一連串處理,首先爲這樣的處理定義一套網格(mesh),網格中能夠定義分叉(fork)、鏈接(join)、循環(loop)。數據流入這樣的處理網格就可以並行的被處理。你能夠認爲網格是一種升級版的管道,實際上不少時候就是被看成管道來使用。使用場景能夠是「分析文本文件中詞頻」,也能夠是「處理生產者/消費者問題」。

 

20.1. 5Actor模型

Scala有Akka,其實微軟研究院也推出了Orleans來支持了Actor模型的實現,固然也有Akka.NET可用。Orleans設計的目標是爲了方便程序員開發須要大規模擴展的雲服務,

 

 

21. Qa

.2:什麼時候用異步,什麼時候用線程或線程池

這須要從「IO操做的DMADirect Memory Access)模式講起。經過DMA的數據交換幾乎能夠不損耗CPU的資源。在硬件部分,硬盤、網卡、聲卡、顯卡等都有DMA功能。能夠簡單的認爲,當咱們的工做線程須要操做I/O資源的時候(如讀取一個大文件、讀取一個網頁、讀取Socke包等),咱們就須要用異步去作這些事情。異步模式只會在工做開始以及工做結束的時候佔用CLR線程池,其它時候由硬盤、網卡等硬件設備來處理具體的工做,這就不會過多佔用到CPU空間和時間損耗。 

歸納而言:

計算密集型工做,直接採用線程;

IO密集型工做,採用異步機制;

當咱們不清楚什麼工做是I/O密集型的,一個不是很恰當的指導就是:查看FCL類型成員,若是成員提供了相似BeginDosomething方法的,則優先使用它,而不是新起一個線程或丟到線程池。

 

3.4:什麼時候用Thread 
以上的各類線程模型,它們最終都是Thread。 那麼何時須要Thread直接出場呢?

最重要的使用Thread的理由是,咱們須要控制線程的優先級。Thread之上的線程模型都不支持優先級設置。設置一個線程的高優先級可使它得到更多的CPU時間;

再者,能夠控制線程爲前臺線程。固然,由Thread新起的線程默認就是前臺線程。前臺線程不隨着調用者線程的中斷而中斷,這使得咱們能夠用Thread來進行一些關鍵性的操做。

 

22. Java c# .net c++的併發技術

22.1. Java併發編程實戰(第16Jolt大獎提名圖書,Java併發編程必讀佳做

做者:Brian GoetzTim PeierlsJoshua BlochJoseph BowbeerDavid HolmesDoug Lea 著,童雲蘭 等譯

 

 

1章 簡介

 第2章 線程安全性

 第3章 對象的共享

 第4章 對象的組合

 第5章 基礎構建模塊

 第6章 任務執行

 第7章 取消與關閉

 第8章 線程池的使用

 第9章 圖形用戶界面應用程序

 第10章 避免活躍性危險

 第11章 性能與可伸縮性

 第12章 併發程序的測試

 第13章 顯式鎖

 第14章 構建自定義的同步工具

 第15章 原子變量與非阻塞同步機制

 第16章 Java內存模型

 

 

22.2. Java併發技術

Executor框架

 

22.3. C#多線程編程實戰( ((美... 

第1章 線程基礎  lock關鍵字 1.11 使用Monitor類鎖定資源
 2章 線程同步
 3章 使用線程池
4章 使用任務並行庫
5章 使用C# 5.0
6章 使用併發集合
7章 使用PLINQ
8章 使用Reactive Extensions
9章 使用異步I/O
10章 並行編程模式
11章 更多信息

 

22.4. Line 278:   《C++併發編程實戰》 Line 285: 1章 你好,C++併發世界 

Line 300: 2章 管理線程

Line 311: 3章 在線程間共享數據

Line 329: 4章 同步併發操做

Line 348: 5C++內存模型和原子

Line 370: 6章 設計基於鎖的併發數據結構

Line 380: 7章 設計無鎖的併發數據結構

 

22.5. C#併發編程經典實例》

 1 章 併發編程概述  

2 章 異步編程基礎  

3 章 並行開發的基礎  

4 章 數據流基礎  

5 章 Rx 基礎  

6 章 測試技巧  

7 章 互操做  

8 章 集合  

9 章 取消  

10 章 函數式OOP

11 章 同步  

12 章 調度  

13 章 實用技巧  

參考資料

異步、多線程、任務、並行編程之一:選擇合適的多線程模型 - Luminji - 博客園.html

我爲何喜歡用C#來作併發編程-博客-雲棲社區-阿里雲.html

 

atiend

相關文章
相關標籤/搜索