小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux下同步模式、異步模式、阻塞調(diào)用、非阻塞調(diào)用總結(jié)

 clover_xian 2013-01-17

Linux下同步模式、異步模式、阻塞調(diào)用、非阻塞調(diào)用總結(jié)

分類: 網(wǎng)絡(luò)編程 1347人閱讀評(píng)論(1)收藏舉報(bào)

同步和異步:與消息的通知機(jī)制有關(guān)。

 

本質(zhì)區(qū)別

現(xiàn)實(shí)例子

同步模式

由處理消息者自己去等待消息是否被觸發(fā)

我去銀行辦理業(yè)務(wù),選擇排隊(duì)等,排到頭了就辦理。

異步模式

由觸發(fā)機(jī)制來(lái)通知處理消息者

我去銀行辦理業(yè)務(wù),取一個(gè)小紙條上面有我的號(hào)碼,等到排到我這一號(hào)時(shí)由柜臺(tái)的人通知我輪到我去辦理業(yè)務(wù)。

 

阻塞與非阻塞:與線程等待消息(無(wú)所謂同步或者異步)時(shí)的狀態(tài)有關(guān)。

 

本質(zhì)區(qū)別

現(xiàn)實(shí)例子

阻塞調(diào)用

線程掛起,不能做其他事。

上面的那個(gè)例子,不論是排隊(duì)還是使用號(hào)碼等待通知,如果在這個(gè)等待的過(guò)程中,等待者除了等待消息之外不能做其它的事情,那么該機(jī)制就是阻塞的。

非阻塞調(diào)用

線程活躍,能處理其他事。

在銀行辦理這些業(yè)務(wù)的時(shí)候一邊打打電話發(fā)發(fā)短信一邊等待,這樣的狀態(tài)就是非阻塞的。

 

它們之間的組合應(yīng)用舉例:

 

阻塞調(diào)用

非阻塞調(diào)用

同步模式

read/write

read/write

O_NONBLOCK

異步模式

IO復(fù)用:select/poll,epoll(LT模式)

AIO系列:aio_read,aio_write等;epoll(ET模式)

 

同步阻塞IO

最常用的一個(gè)模型是同步阻塞 I/O 模型。在這個(gè)模型中,用戶空間的應(yīng)用程序執(zhí)行一個(gè)系統(tǒng)調(diào)用,這會(huì)導(dǎo)致應(yīng)用程序阻塞。這意味著應(yīng)用程序會(huì)一直阻塞,直到系統(tǒng)調(diào)用完成為止(數(shù)據(jù)傳輸完成或發(fā)生錯(cuò)誤)。調(diào)用應(yīng)用程序處于一種不再消費(fèi) CPU 而只是簡(jiǎn)單等待響應(yīng)的狀態(tài),因此從處理的角度來(lái)看,這是非常有效的。

1 給出了傳統(tǒng)的阻塞 I/O 模型,這也是目前應(yīng)用程序中最為常用的一種模型。其行為非常容易理解,其用法對(duì)于典型的應(yīng)用程序來(lái)說(shuō)都非常有效。在調(diào)用 read 系統(tǒng)調(diào)用時(shí),應(yīng)用程序會(huì)阻塞并對(duì)內(nèi)核進(jìn)行上下文切換。然后會(huì)觸發(fā)讀操作,當(dāng)響應(yīng)返回時(shí)(從我們正在從中讀取的設(shè)備中返回),數(shù)據(jù)就被移動(dòng)到用戶空間的緩沖區(qū)中。然后應(yīng)用程序就會(huì)解除阻塞(read 調(diào)用返回)。

 

圖1. 同步阻塞 I/O 模型的典型流程

從應(yīng)用程序的角度來(lái)說(shuō),read 調(diào)用會(huì)延續(xù)很長(zhǎng)時(shí)間。實(shí)際上,在內(nèi)核執(zhí)行讀操作和其他工作時(shí),應(yīng)用程序的確會(huì)被阻塞。

 

同步非阻塞I/O

同步阻塞 I/O 的一種效率稍低的變種是同步非阻塞 I/O。在這種模型中,設(shè)備是以非阻塞的形式打開的。這意味著 I/O 操作不會(huì)立即完成,read 操作可能會(huì)返回一個(gè)錯(cuò)誤代碼,說(shuō)明這個(gè)命令不能立即滿足(EAGAIN EWOULDBLOCK),如圖 2 所示。

 

2. 同步非阻塞 I/O 模型的典型流程

非阻塞的實(shí)現(xiàn)是 I/O 命令可能并不會(huì)立即滿足,需要應(yīng)用程序調(diào)用許多次來(lái)等待操作完成(輪詢)。這可能效率不高,因?yàn)樵诤芏嗲闆r下,當(dāng)內(nèi)核執(zhí)行這個(gè)命令時(shí),應(yīng)用程序必須要進(jìn)行忙碌等待,直到數(shù)據(jù)可用為止,或者試圖執(zhí)行其他工作。正如圖 2 所示的一樣,這個(gè)方法可以引入 I/O 操作的延時(shí),因?yàn)閿?shù)據(jù)在內(nèi)核中變?yōu)榭捎玫接脩粽{(diào)用 read 返回?cái)?shù)據(jù)之間存在一定的間隔,這會(huì)導(dǎo)致整體數(shù)據(jù)吞吐量的降低。

 

異步阻塞IO

另外一個(gè)阻塞解決方案是帶有阻塞通知的非阻塞 I/O。在這種模型中,配置的是非阻塞 I/O,然后使用阻塞 select 系統(tǒng)調(diào)用來(lái)確定一個(gè) I/O 描述符何時(shí)有操作。使 select 調(diào)用非常有趣的是它可以用來(lái)為多個(gè)描述符提供通知,而不僅僅為一個(gè)描述符提供通知。對(duì)于每個(gè)提示符來(lái)說(shuō),我們可以請(qǐng)求這個(gè)描述符可以寫數(shù)據(jù)、有讀數(shù)據(jù)可用以及是否發(fā)生錯(cuò)誤的通知。

 

3 異步阻塞IO模型的典型流程(select

select 調(diào)用的主要問題是它的效率不是非常高。盡管這是異步通知使用的一種方便模型,但是對(duì)于高性能的 I/O 操作來(lái)說(shuō)不建議使用。

 

異步非阻塞IO

最后,異步非阻塞 I/O 模型是一種處理與 I/O 重疊進(jìn)行的模型。讀請(qǐng)求會(huì)立即返回,說(shuō)明 read 請(qǐng)求已經(jīng)成功發(fā)起了。在后臺(tái)完成讀操作時(shí),應(yīng)用程序然后會(huì)執(zhí)行其他處理操作。當(dāng) read 的響應(yīng)到達(dá)時(shí),就會(huì)產(chǎn)生一個(gè)信號(hào)或執(zhí)行一個(gè)基于線程的回調(diào)函數(shù)來(lái)完成這次 I/O 處理過(guò)程。

 

4 異步非阻塞IO模型的典型流程

在一個(gè)進(jìn)程中為了執(zhí)行多個(gè) I/O 請(qǐng)求而對(duì)計(jì)算操作和 I/O 處理進(jìn)行重疊處理的能力利用了處理速度與 I/O 速度之間的差異。當(dāng)一個(gè)或多個(gè) I/O 請(qǐng)求掛起時(shí),CPU 可以執(zhí)行其他任務(wù);或者更為常見的是,在發(fā)起其他 I/O 的同時(shí)對(duì)已經(jīng)完成的 I/O 進(jìn)行操作。

異步IO的動(dòng)機(jī)  

從前面 I/O 模型的分類中,我們可以看出 AIO 的動(dòng)機(jī)。這種阻塞模型需要在 I/O 操作開始時(shí)阻塞應(yīng)用程序。這意味著不可能同時(shí)重疊進(jìn)行處理和 I/O 操作。同步非阻塞模型允許處理和 I/O 操作重疊進(jìn)行,但是這需要應(yīng)用程序根據(jù)重現(xiàn)的規(guī)則來(lái)檢查 I/O 操作的狀態(tài)。這樣就剩下異步非阻塞 I/O 了,它允許處理和 I/O 操作重疊進(jìn)行,包括 I/O 操作完成的通知。

除了需要阻塞之外,select 函數(shù)所提供的功能(異步阻塞 I/O)與 AIO 類似。不過(guò),它是對(duì)通知事件進(jìn)行阻塞,而不是對(duì) I/O 調(diào)用進(jìn)行阻塞。

 

轉(zhuǎn)載:

http://blog./u3/99982/showart_1996295.html

https://www.ibm.com/developerworks/cn/linux/l-async/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多