開啟主選單

求真百科

來自 搜狐網 的圖片

異步是中國的一個科技名詞。

目前,世界上只有兩種文字,一種是方塊文字,如漢字[1]、日文和韓文,還有歷史上曾經出現過的西夏文[2]、契丹文,喃字等;另外一種是字母文字,主要包括拉丁字母文字、阿拉伯字母文字、粟特字母文字等。

目錄

名詞解釋

異步:一種通訊方式,對設備需求簡單。我們的PC機提供的標準通信接口都是異步的。

異步雙方不需要共同的時鐘,也就是接收方不知道發送方什麼時候發送,所以在發送的信息中就要有提示接收方開始接收的信息,如開始位,同時在結束時有停止位。

異步的另外一種含義是計算機多線程的異步處理。與同步處理相對,異步處理不用阻塞當前線程來等待處理完成,而是允許後續操作,直至其它線程將處理完成,並回調通知此線程。

但此處需要明確的是:異步與多線程與並行不是同一個概念.

C#中的異步

異步的概念和同步相對。

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

線程

線程是進程中某個單一順序的控制流。也被稱為輕量進程(lightweight processes).計算機科學術語,指運行中的程序的調度單位.

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

並行

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

異步

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

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

異步和多線程兩者都可以達到避免調用線程阻塞的目的,從而提高軟件的可響應性。

異步操作無須額外的線程負擔,並且使用回調的方式進行處理,在設計良好的情況下,處理函數可以不必使用共享變量(即使無法完全不用,最起碼可以減少 共享變量的數量),減少了死鎖的可能。當然異步操作也並非完美無暇。編寫異步操作的複雜程度較高,程序主要使用回調方式進行處理,與普通人的思維方式有些 出入,而且難以調試。當需要執行I/O操作時,使用異步操作比使用線程+同步 I/O操作更合適。

多線程中的處理程序依然是順序執行,符合普通人的思維習慣,所以編程簡單。但是多線程的缺點也同樣明顯,線程的使用(濫用)會給系統帶來上下文切換的額外負擔。並且線程間的共享變量可能造成死鎖的出現。多線程的適用範圍則是那種需要長時間CPU運算的場合,例如耗時較長的圖形處理和算法執行。

參考文獻