複製鏈接
請複製以下鏈接發送給好友

異步

鎖定
異步:一種通訊方式,對設備需求簡單。我們的PC機提供的標準通信接口都是異步的。
異步雙方不需要共同的時鐘,也就是接收方不知道發送方什麼時候發送,所以在發送的信息中就要有提示接收方開始接收的信息,如開始位,同時在結束時有停止位。
異步的另外一種含義是計算機多線程的異步處理。與同步處理相對,異步處理不用阻塞當前線程來等待處理完成,而是允許後續操作,直至其它線程將處理完成,並回調通知此線程。
但此處需要明確的是:異步與多線程與並行不是同一個概念.
中文名
異步
外文名
Asynchronous

異步C#中的異步

異步的概念和同步相對。
異步,線程,並行.三個概念是不同的.

異步線程

線程是進程中某個單一順序的控制流。也被稱為輕量進程(lightweight processes).計算機科學術語,指運行中的程序的調度單位. [1] 
當一個異步過程調用發出後,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。以CAsyncSocket類為例(注意,CSocket從CAsyncSocket派生,但是其功能已經由異步轉化為同步),當一個客户端通過調用Connect函數發出一個連接請求後,調用者線程立刻可以朝下運行。當連接真正建立起來以後,socket底層會發送一個消息通知該對象。這裏提到執行部件和調用者通過三種途徑返回結果:狀態、通知和回調。可以使用哪一種依賴於執行部件的實現,除非執行部件提供多種選擇,否則不受調用者控制。如果執行部件用狀態來通知,那麼調用者就需要每隔一定時間檢查一次,效率就很低(有些初學多線程編程的人,總喜歡用一個循環去檢查某個變量的值,這其實是一種很嚴重的錯誤)。如果是使用通知的方式,效率則很高,因為執行部件幾乎不需要做額外的操作。至於回調函數,其實和通知沒太多區別。

異步並行

一般指並行計算,是説同一時刻有多條指令同時被執行,這些指令可能執行於同一CPU的多核上,或者多個CPU上,或者多個物理主機甚至多個網絡中. [2] 

異步異步

與同步相對應,異步指的是讓CPU暫時擱置當前請求的響應,處理下一個請求,當通過輪詢或其他方式得到回調通知後,開始運行。多線程將異步操作放入另一線程中運行,通過輪詢或回調方法得到完成通知,但是完成端口,由操作系統接管異步操作的調度,通過硬件中斷,在完成時觸發回調方法,此方式不需要佔用額外線程 [3] 

異步C#異步與多線程的異同點

異步和多線程兩者都可以達到避免調用線程阻塞的目的,從而提高軟件的可響應性。
異步操作無須額外的線程負擔,並且使用回調的方式進行處理,在設計良好的情況下,處理函數可以不必使用共享變量(即使無法完全不用,最起碼可以減少 共享變量的數量),減少了死鎖的可能。當然異步操作也並非完美無暇。編寫異步操作的複雜程度較高,程序主要使用回調方式進行處理,與普通人的思維方式有些 出入,而且難以調試。當需要執行I/O操作時,使用異步操作比使用線程+同步 I/O操作更合適。
多線程中的處理程序依然是順序執行,符合普通人的思維習慣,所以編程簡單。但是多線程的缺點也同樣明顯,線程的使用(濫用)會給系統帶來上下文切換的額外負擔。並且線程間的共享變量可能造成死鎖的出現。多線程的適用範圍則是那種需要長時間CPU運算的場合,例如耗時較長的圖形處理和算法執行。

異步異步通信

異步簡介

在通信中,“異步通信”是一種很常用的通信方式。異步通信在發送字符時,所發送的字符之間的時間間隔可以是任意的。當然,接收端必須時刻做好接收的準備(如果接收端主機的電源都沒有加上,那麼發送端發送字符就沒有意義,因為接收端根本無法接收)。發送端可以在任意時刻開始發送字符,因此必須在每一個字符的開始和結束的地方加上標誌,即加上開始位和停止位,以便使接收端能夠正確地將每一個字符接收下來。異步通信的好處是通信設備簡單、便宜,但傳輸效率較低(因為開始位和停止位的開銷所佔比例較大)。
異步通信也可以是以作為發送的單位。接收端必須隨時做好接收幀的準備。這時,幀的首部必須設有一些特殊的比特組合,使得接收端能夠找出一幀的開始。這也稱為幀定界幀定界還包含確定幀的結束位置。這有兩種方法。一種是在幀的尾部設有某種特殊的比特組合來標誌幀的結束。或者在幀首部中設有幀長度的字段。需要注意的是,在異步發送幀時,並不是説發送端對幀中的每一個字符都必須加上開始位和停止位後再發送出去,而是説,發送端可以在任意時間發送一個幀,而幀與幀之間的時間間隔也可以是任意的。在一幀中的所有比特是連續發送的。發送端不需要在發送一幀之前和接收端進行協調(不需要先進行比特同步)。 [4] 

異步差錯類型

異步通信過程中,可能發生通信錯,一般有3種錯誤:
幀格式錯:在應該接收到停止位的時候,接收到邏輯的“0”,便產生幀格式錯誤。
奇偶錯:接收到的奇偶校驗位錯。
覆蓋錯:通信接口接收到數據並存放到數據輸入寄存器中,但是CPU沒有及時來取,後面新接收的數據覆蓋了前面收到的數據,叫做覆蓋錯。
發生幀格式錯和奇偶錯的原因可能為下面幾種:
(1)發送和接收雙方採用了不同的傳輸率,或雖然雙方約定了相同的傳輸率,但傳輸率不可能絕對相等。在通信的速率比較高的情況下,如果雙方的傳輸率誤差達到一定的程度,也會造成通信出錯;
(2)通信雙方採用了不相同的幀格式;
(3)干擾。
參考資料
  • 1.    (美)Christian Nagel Bill Evjen Jay Glynn.Professional C# 4.0 and .NET 4. Wrox:清華大學出版社,2010 年11月:第20章 第 20.1 節 概述 507
  • 2.    (美)Christian Nagel Bill Evjen Jay Glynn.C#高級編程第7版.美國:清華大學出版社,2010 年11月:1.4.4
  • 3.    (美)Christian Nagel Bill Evjen Jay Glynn.C#高級編程第7版Professional C# 4.0 and .NET 4.美國:清華大學出版社,2010 年11月:章節19.2
  • 4.    庫羅斯.計算機網絡自頂向下方法:機械工業出版社,2009-1-1