同步通信与异步通信以及阻塞和非阻塞之我见 [原]
生活随笔
收集整理的這篇文章主要介紹了
同步通信与异步通信以及阻塞和非阻塞之我见 [原]
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、硬件層次上的同步與異步
1.異步通信
???在異步通信中,CPU與外設(shè)之間有兩項約定:
???(1)字符格式---字符的編碼形式及規(guī)定,每個串行字符由以下四個部分組成:
??????⑴?1個起始位,低電平;
??????⑵?5--8個數(shù)據(jù)位;
??????⑶?1個奇偶校驗位;
??????⑷?1--2個終止位(停止位)高電平;?
???(2)波特率
??????波特率是指單位時間內(nèi)傳送二進制數(shù)據(jù)的位數(shù),以位/秒位單位,它是衡量串行數(shù)據(jù)
????傳送速度快慢的重要標志和參數(shù)。
????例如:假如數(shù)據(jù)出送速率是120位/秒,則傳送的波特率為:120波特。
????注意:異步通信的傳送速度一般在50波特-----19200波特之間。
2.同步通信
???在異步通信中,每個字符要用起始位和終止位作為字符開始和結(jié)束的標志,占用了一些時間,為了提高數(shù)據(jù)塊的傳送速度,就要設(shè)法去掉這些標志,就采用同步通信。
???同步通信的速度可達500千波特。但是它的硬件電路比較復(fù)雜。
3.優(yōu)缺點比較
1)異步通信簡單,雙方時鐘可允許一定誤差。同步通信較復(fù)雜,雙方時鐘的允許誤差較小。
2)通信效率:異步通信低,同步通信高。
3)同步通信取消了每個字節(jié)的同步位,從而使數(shù)據(jù)位在傳送為中所占比率增大,提高了傳送效率。
4)同步通信容許用戶傳送沒有意義的二進制數(shù)據(jù),即在沒有信息要傳輸時,要填上空字符,因為同步傳輸不允許有間隙。
二、軟件層次的同步與異步
1.同步通信:
一般使用單線程,讀操作和寫操作都在同一個線程里面,讀操作時不會寫,寫操作時不會讀,此時硬件處于半雙工模式。
2.異步通信
一般使用多線程,讀操作和寫操作在不同的線程里面,讀操作和寫操作同時進行,當讀或?qū)懲瓿蓵r使用事件通知,此時硬件處于全雙工模式。
用異步方式操作串口必須要定義?OVERLAPPED?結(jié)構(gòu),其中的?hEvent?必須自己建立,要定義兩個?OVERLAPPED?結(jié)構(gòu),一個用于讀一個用于寫,當然也必須建立兩個?Event,把它們放入?OVERLAPPED.hEvent。
一般我們是在主線程中寫數(shù)據(jù),因為寫是我們可以控制的,而讀的時候我們不知道數(shù)據(jù)什么時候會到,所以要建立一個線程專門用來讀數(shù)據(jù),在這個線程中,我們循環(huán)地用?ReadFile?讀串口,同時用?WaitCommEvent?檢測線路狀態(tài)。
三、軟件層次的阻塞和非阻塞模式
1.阻塞模式:
????阻塞模式執(zhí)行I/O操作完成前會一直進行等待,不會將控制權(quán)交給程序,一般可以設(shè)置一個超時結(jié)構(gòu),超時時間到則返回超時,可以通過多線程技術(shù)進行處理。
2.非阻塞模式
????非阻塞模式執(zhí)行I/O操作后會立即返回,而不管讀寫有沒有成功,一般在進行I/O操作前可以通過一些異步模型(如socket通信里面的select模型)來查詢通信口的當前狀態(tài)是否可讀或可寫。
1.異步通信
???在異步通信中,CPU與外設(shè)之間有兩項約定:
???(1)字符格式---字符的編碼形式及規(guī)定,每個串行字符由以下四個部分組成:
??????⑴?1個起始位,低電平;
??????⑵?5--8個數(shù)據(jù)位;
??????⑶?1個奇偶校驗位;
??????⑷?1--2個終止位(停止位)高電平;?
???(2)波特率
??????波特率是指單位時間內(nèi)傳送二進制數(shù)據(jù)的位數(shù),以位/秒位單位,它是衡量串行數(shù)據(jù)
????傳送速度快慢的重要標志和參數(shù)。
????例如:假如數(shù)據(jù)出送速率是120位/秒,則傳送的波特率為:120波特。
????注意:異步通信的傳送速度一般在50波特-----19200波特之間。
2.同步通信
???在異步通信中,每個字符要用起始位和終止位作為字符開始和結(jié)束的標志,占用了一些時間,為了提高數(shù)據(jù)塊的傳送速度,就要設(shè)法去掉這些標志,就采用同步通信。
???同步通信的速度可達500千波特。但是它的硬件電路比較復(fù)雜。
3.優(yōu)缺點比較
1)異步通信簡單,雙方時鐘可允許一定誤差。同步通信較復(fù)雜,雙方時鐘的允許誤差較小。
2)通信效率:異步通信低,同步通信高。
3)同步通信取消了每個字節(jié)的同步位,從而使數(shù)據(jù)位在傳送為中所占比率增大,提高了傳送效率。
4)同步通信容許用戶傳送沒有意義的二進制數(shù)據(jù),即在沒有信息要傳輸時,要填上空字符,因為同步傳輸不允許有間隙。
二、軟件層次的同步與異步
1.同步通信:
一般使用單線程,讀操作和寫操作都在同一個線程里面,讀操作時不會寫,寫操作時不會讀,此時硬件處于半雙工模式。
2.異步通信
一般使用多線程,讀操作和寫操作在不同的線程里面,讀操作和寫操作同時進行,當讀或?qū)懲瓿蓵r使用事件通知,此時硬件處于全雙工模式。
用異步方式操作串口必須要定義?OVERLAPPED?結(jié)構(gòu),其中的?hEvent?必須自己建立,要定義兩個?OVERLAPPED?結(jié)構(gòu),一個用于讀一個用于寫,當然也必須建立兩個?Event,把它們放入?OVERLAPPED.hEvent。
一般我們是在主線程中寫數(shù)據(jù),因為寫是我們可以控制的,而讀的時候我們不知道數(shù)據(jù)什么時候會到,所以要建立一個線程專門用來讀數(shù)據(jù),在這個線程中,我們循環(huán)地用?ReadFile?讀串口,同時用?WaitCommEvent?檢測線路狀態(tài)。
三、軟件層次的阻塞和非阻塞模式
1.阻塞模式:
????阻塞模式執(zhí)行I/O操作完成前會一直進行等待,不會將控制權(quán)交給程序,一般可以設(shè)置一個超時結(jié)構(gòu),超時時間到則返回超時,可以通過多線程技術(shù)進行處理。
2.非阻塞模式
????非阻塞模式執(zhí)行I/O操作后會立即返回,而不管讀寫有沒有成功,一般在進行I/O操作前可以通過一些異步模型(如socket通信里面的select模型)來查詢通信口的當前狀態(tài)是否可讀或可寫。
轉(zhuǎn)載于:https://www.cnblogs.com/highmayor/archive/2008/04/23/1167739.html
總結(jié)
以上是生活随笔為你收集整理的同步通信与异步通信以及阻塞和非阻塞之我见 [原]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c#常用函数列表
- 下一篇: Visifire Silverlight