寫過很多篇非同步,線程,並行的文章了,我覺得有必要總結一下了,然後把目錄整理一下,分享給大家,這麼大家看的時候方便些! 非阻塞 非同步操作無須額外的線程負擔,並且使用回調的方式進行處理,在設計良好的情況下,處理函數可以不必使用共用變數(即使無法完全不用,最起碼可以減少 共用變數的數量),減少了死鎖的可能 ...
寫過很多篇非同步,線程,並行的文章了,我覺得有必要總結一下了,然後把目錄整理一下,分享給大家,這麼大家看的時候方便些!
非阻塞
非同步操作無須額外的線程負擔,並且使用回調的方式進行處理,在設計良好的情況下,處理函數可以不必使用共用變數(即使無法完全不用,最起碼可以減少 共用變數的數量),減少了死鎖的可能。當然非同步操作也並非完美無暇。編寫非同步操作的複雜程度較高,程式主要使用回調方式進行處理,與普通人的思維方式有些 出入,而且難以調試。當需要執行I/O操作時,使用非同步操作比使用線程+同步 I/O操作更合適。非同步和多線程兩者都可以達到避免調用線程阻塞的目的,從而提高軟體的可響應性。
非同步本質為方法的回調
非同步操作無須額外的線程負擔,並且使用回調的方式進行處理,在設計良好的情況下,處理函數可以不必使用共用變數(即使無法完全不用,最起碼可以減少 共用變數的數量),減少了死鎖的可能。當然非同步操作也並非完美無暇。編寫非同步操作的複雜程度較高,程式主要使用回調方式進行處理,與普通人的思維方式有些 出入,而且難以調試。當需要執行I/O操作時,使用非同步操作比使用線程+同步 I/O操作更合適。
線程爭奪與死鎖
多線程中的處理程式依然是順序執行,符合普通人的思維習慣,所以編程簡單。但是多線程的缺點也同樣明顯,線程的使用(濫用)會給系統帶來上下文切換的額外 負擔。並且線程間的共用變數可能造成死鎖的出現。多線程的適用範圍則是那種需要長時間CPU運算的場合,例如耗時較長的圖形處理和演算法執行。
非同步與並行-目錄
C#~非同步編程續~.net4.5主推的await&async應用
EF架構~EF非同步改造之路~讓DbContextRepository去實現非同步介面
C#~非同步編程再續~await與async引起的w3wp.exe崩潰
C#~非同步編程再續~await與async引起的w3wp.exe崩潰-問題友好的解決
C#~非同步編程再續~大叔所理解的並行編程(Task&Parallel)(最新2016-05-27日發佈)
永久更新中...