C#並發編程——並發編程技術


並發編程技術

並發的基本概念

並發,即同時做幾件事。但是並發並不只是多線程,多線程只是並發的一種形式,還有很多並發技術,比如異步,並行,TPL數據流,響應式編程等。

並發技術——多線程

多線程是並發的一種形式,建議盡量使用ThreadPool。

並發技術——異步編程

異步編程有兩大優點:提高GUI程序的響應性;提高服務器應用的可擴展性。
C#提供了兩個異步關鍵字:async和await,async加在方法聲明上,它的主要目的是使方法內的await關鍵字生效。使用async關鍵字的方法應該返回Task或Task。
擴展閱讀:《Async in C# 5.0》


並發技術——並行編程

多線程的一種。對於計算限制的任務(需要大量計算),並且任務可以分割成獨立任務塊,就應該使用並行編程,讓這些任務塊在不同核上獨立運行。通常並行編程可臨時提高CPU利用率以提高吞吐量。然而它並不適合服務器系統,因為它可能影響服務器自身的並行處理能力。
並行分為兩種形式:數據並行和任務並行。實現數據並行有幾種做法:使用Parall.ForEach、Parall.For,使用PLINQ(並行LINQ)。不管哪種方法,每個任務塊要盡可能互相獨立
擴展閱讀:《Parallel Programming with Microsoft.NET》


並發技術——響應式編程

一種聲明式的編程模式,程序在該模式中對事件做出響應。根據經驗,如果事件中帶有參數,那么最好采用響應式編程,而不是常規的事件處理程序。響應式編程基於“可觀察的流”(observable stream)這一概念。一旦申請了可觀察流,就可收到任意數量的數據項,並且流在結束時會發出一個錯誤或一個“流結束”的通知。
可觀察流分為hot observable(熱可觀察流:一直在發生的事件流,如果事件到達時沒有訂閱,事件會丟失)和cold observable(冷可觀察流:不會主動產生事件,通過啟動一個事件隊列來響應訂閱,比如HTTP下載,只有在訂閱后才會發出HTTP請求)。
微軟的Reactive Extensions(Rx)庫提供了所有函數式編程接口實現。
擴展閱讀:《Introduction to Rx》


並發技術——TPL數據流

該技術把異步編程和並行編程兩種技術結合起來。如需對數據進行一連串的處理,TPL數據流就很有用。TPL數據流通常作為一個簡易的管道,數據從管道的一端進入,在管道中穿行,從另一端出來。不過,TPL數據流還可以處理各種類型的網格(mesh),包括網格中定義分叉(fork),連接(join)、循環(loop)的工作。數據流網格的基本組成單元是數據塊(dataflow block)。數據流塊可以是目標塊(接收數據)或源塊(生成數據)。源塊連接到目標塊,創建網格。
擴展閱讀:《Cuide to Implementing Custom TPL Dataflow Blocks》


並發編程的集合

  • 並發集合:大多數采用快照,當一個線程在操作數據時,另一個線程也能枚舉數據,比常規集合加鎖保護數據的方式高效的多。
  • 不可變集合:無法修改。優點是操作簡潔,特別適合函數式編程

技術要點總結

各平台對並發編程的支持:






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM