誤解一:併發就是多線程 實際上多線程只是併發編程的一種形式,在C 中還有很多更實用、更方便的併發編程技術,包括非同步編程、並行編程、TPL 數據流、響應式編程等。 誤解二:只有大型伺服器程式才需要考慮併發 伺服器端的大型程式要響應大量客戶端的數據請求,當然要充分考慮併發。但是桌面程式和手機、平板等移動 ...
誤解一:併發就是多線程
實際上多線程只是併發編程的一種形式,在C#中還有很多更實用、更方便的併發編程技術,包括非同步編程、並行編程、TPL 數據流、響應式編程等。
誤解二:只有大型伺服器程式才需要考慮併發
伺服器端的大型程式要響應大量客戶端的數據請求,當然要充分考慮併發。但是桌面程式和手機、平板等移動端應用同樣需要考慮併發編程,因為它們是直接面向最終用戶的,而現在用戶對使用體驗的要求越來越高。程式必須能隨時響應用戶的操作,尤其是在後臺處理時(讀寫數據、與伺服器通信等),這正是併發編程的目的之一。
誤解三:併發編程很複雜,必須掌握很多底層技術
C# 和 .NET 提供了很多程式庫,併發編程已經變得簡單多了。尤其是 .NET 4.5 推出了全新的 async 和 await 關鍵字,使併發編程的代碼減少到了最低限度。
上述摘自譯者序。
本書基本信息:
著 [美] Stephen Cleary
譯 相銀初
市面上關於併發的技術書,大多是Java相關。有個前輩推薦了這本書,耐心看了一遍,真心覺得真是不錯,決定精讀並寫一個系列筆記博客。前輩推薦的時候是去年年初,到現在決定寫博客,已經一年半過去,羞愧羞愧,執行力不高,但總歸是開始著手做了,希望能堅持下來。
提到併發就不得不提並行,即並行(Parallel)和併發(Concurrent)的區別。
知乎的一個回答我覺得拿來解釋最合適不過,這個解釋的角度是從CPU為出發點。
併發與並行的區別? - 劉志軍的回答 - 知乎
併發是兩個隊列交替使用一臺咖啡機,並行是兩個隊列同時使用兩台咖啡機
咖啡機指CPU,排隊的隊伍可以是線程(thread)也可以是進程(process)。
進程(process)和線程(thread)的概念描述打算獨立成文,下次就寫。
在對誤解一的解釋中,可以看出作者是認為並行編程也屬於併發編程的。是的,並行應該是屬於併發的一種,對併發的概念來說,並行可以認為是併發的一種特殊情況。
在後續的筆記中我會將書中的偽代碼實例嘗試寫成可運行的代碼,用於自己強化理解和記憶,這也是精讀的意義所在。寫的代碼有所不足之處,望不吝指教。