前面的幾篇文章<<.NET 中的阻塞隊列BlockingCollection的正確打開方式>><<項目開發中應用如何併發處理的一二事>>從代碼以及理論角度,充分的利用了微軟提供的BlockingCollection的屬性IsComplete以及CompleteAdding完成了併發的設計,這次我們單 ...
前面的幾篇文章<<.NET 中的阻塞隊列BlockingCollection的正確打開方式>><<項目開發中應用如何併發處理的一二事>>從代碼以及理論角度,充分的利用了微軟提供的BlockingCollection的屬性IsComplete以及CompleteAdding完成了併發的設計,這次我們單單就從流水線式的生產者消費者來設計併發。具體的文章demo請看<<.Net中的並行編程-4.實現高性能非同步隊列>><<.Net中的並行編程-7.基於BlockingCollection實現高性能非同步隊列>>,代碼設計邏輯請看下圖:
圖1是阻塞隊列的併發模式簡圖,圖二是非同步隊列的併發模式簡圖。
參考上文鏈接的代碼,非同步隊列的實現邏輯不同於阻塞隊列的實現邏輯,但其實差不多,非同步隊列是多消費者的形式消費,在遞歸中不斷的調用task開啟新的線程,而且消費者線程的數量取決於隊列的數量,這就不太好了,當然我們可以做下改進,阻塞隊列是單消費者的形式消費,我們可以很方便的改為多消費者。總的來說,這個的設計還是很不錯的。做下筆記,回頭再好好的研究下,以後直接放到項目中用,以及後面的春招!