同步異步通信和程式編寫中的同步異步

一、硬件層次上的同步與異步
1.異步通信
   在異步通信中,CPU與外設之間有兩項約定:
   (1)字符格式---字符的編碼形式及規定,每個串行字符由以下四個部分組成:
      ⑴ 1個起始位,低電平;
      ⑵ 5--8個數據位;
      ⑶ 1個奇偶校驗位;
      ⑷ 1--2個終止位(停止位)高電平; 
   (2)波特率
    波特率是指單位時間內傳送二進制數據的位數,以位/秒位單位,它是衡量串行數據傳送速度快慢的重要標誌和參數。
    例如:假如數據出送速率是120位/秒,則傳送的波特率爲:120波特。
    注意:異步通信的傳送速度一般在50波特-----19200波特之間。
2.同步通信
   在異步通信中,每個字符要用起始位和終止位作爲字符開始和結束的標誌,佔用了一些時間,爲了提高數據塊的傳送速度,就要設法去掉這些標誌,就採用同步通信。
   同步通信的速度可達500千波特。但是它的硬件電路比較複雜。

3.優缺點比較
1)異步通信簡單,雙方時鐘可允許一定誤差。同步通信較複雜,雙方時鐘的允許誤差較小。
2)通信效率:異步通信低,同步通信高。
3)同步通信取消了每個字節的同步位,從而使數據位在傳送爲中所佔比率增大,提高了傳送效率。
4)同步通信容許用戶傳送沒有意義的二進制數據,即在沒有信息要傳輸時,要填上空字符,因爲同步傳輸不允許有間隙。

二、軟件層次的同步與異步
1.同步通信:
一般使用單線程,讀操作和寫操作都在同一個線程裏面,讀操作時不會寫,寫操作時不會讀,此時硬件處於半雙工模式。

2.異步通信
一般使用多線程,讀操作和寫操作在不同的線程裏面,讀操作和寫操作同時進行,當讀或寫完成時使用事件通知,此時硬件處於全雙工模式。
用異步方式操作串口必須要定義 OVERLAPPED 結構,其中的 hEvent 必須自己建立,要定義兩個 OVERLAPPED 結構,一個用於讀一個用於寫,當然也必須建立兩個 Event,把它們放入 OVERLAPPED.hEvent。
一般我們是在主線程中寫數據,因爲寫是我們可以控制的,而讀的時候我們不知道數據什麼時候會到,所以要建立一個線程專門用來讀數據,在這個線程中,我們循環地用 ReadFile 讀串口,同時用 WaitCommEvent 檢測線路狀態。
例如:Socket的同步模式和異步模式

如果應用程序在執行期間只需要一個線程,請使用下面的方法,這些方法適用於同步操作模式。

  • 如果當前使用的是面向連接的協議(如 TCP),則服務器可以使用 Listen 方法偵聽連接。Accept 方法處理任何傳入的連接請求,並返回可用於與遠程主機進行數據通信的 Socket。可以使用此返回的 Socket 來調用 SendReceive 方法。如果要指定本地 IP 地址和端口號,請在調用 Listen 方法之前先調用 Bind 方法。如果您希望基礎服務提供程序爲您分配可用端口,請使用端口號 0。如果希望連接到偵聽主機,請調用 Connect 方法。若要進行數據通信,請調用 SendReceive 方法。

  • 如果當前使用的是無連接協議(如 UDP),則根本不需要偵聽連接。調用 ReceiveFrom 方法可接受任何傳入的數據報。使用 SendTo 方法可將數據報發送到遠程主機。

      若要在執行過程中使用單獨的線程處理通信,請使用下面的方法,這些方法適用於異步操作模式。

三、軟件層次的阻塞和非阻塞模式
1.阻塞模式:
    阻塞模式執行I/O操作完成前會一直進行等待,不會將控制權交給程序,一般可以設置一個超時結構,超時時間到則返回超時,可以通過多線程技術進行處理。

2.非阻塞模式
    非阻塞模式執行I/O操作後會立即返回,而不管讀寫有沒有成功,一般在進行I/O操作前可以通過一些異步模型(如socket通信裏面的select模型)來查詢通信口的當前狀態是否可讀或可寫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章