非同步IO
非同步IO
非同步IO的概念和同步IO相對。當一個非同步過程調用發出后,調用者不能立刻得到結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調來通知調用者。在一個CPU密集型的應用中,有一些需要處理的數據可能放在磁碟上。預先知道這些數 據的位置,所以預先發起非同步IO讀請求。等到真正需要用到這些數據的時候,再等待非同步IO完成。使用了非同步IO,在發起IO請求到實際使用數據這段時間 內,程序還可以繼續做其他事情
目錄
非同步IO將比特分成小組進行傳送,小組可以是8位的1個字元或更長。發送方可以在任何時刻發送這些比特組,而接收方從不知道它們會在什麼時候到達。
非同步傳輸存在一個潛在的問題,即接收方並不知道數據會在什麼時候到達。在它檢測到數據並做出響應之前,第一個比特已經過去了。這就像有人出乎意料地從後面走上來跟你說話,而你沒來得及反應過來,漏掉了最前面的幾個詞。因此,每次非同步傳輸的信息都以一個起始位開頭,它通知接收方數據已經到達了,這就給了接收方響應、接收和緩存數據比特的時間;在傳輸結束時,一個停止位表示該次傳輸信息的終止。按照慣例,空閑(沒有傳送數據)的線路實際攜帶著一個代表二進位1的信號,非同步傳輸的開始位使信號變成0,其他的比特位使信號隨傳輸的數據信息而變化。最後,停止位使信號重新變回1,該信號一直保持到下一個開始位到達。例如在鍵盤上數字“1”,按照8比特位的擴展ASCII編碼,將發送“00110001”,同時需要在8比特位的前面加一個起始位,後面一個停止位。
非同步傳輸的實現比較容易,由於每個信息都加上了“同步”信息,因此計時的漂移不會產生大的積累,但卻產生了較多的開銷。在上面的例子,每8個比特要多傳送兩個比特,總的傳輸負載就增加25%。對於數據傳輸量很小的低速設備來說問題不大,但對於那些數據傳輸量很大的高速設備來說,25%的負載增值就相當嚴重了。因此,非同步傳輸常用於低速設備。