日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

IO:Reactor和Proactor的区别

發(fā)布時(shí)間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 IO:Reactor和Proactor的区别 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

系統(tǒng)I/O 可分為阻塞型, 非阻塞同步型、阻塞異步型以及非阻塞異步型。

阻塞型I/O意味著控制權(quán)只到調(diào)用操作結(jié)束了才會(huì)回到調(diào)用者手里。

同步非阻塞是會(huì)立即返回控制權(quán)給調(diào)用者的。調(diào)用者不需要等等,它從調(diào)用的函數(shù)獲取兩種結(jié)果:

要么此次調(diào)用成功進(jìn)行了;

要么系統(tǒng)返回錯(cuò)誤標(biāo)識(shí)告訴調(diào)用者當(dāng)前資源不可用,你再等等或者再試度看吧。

比如read()操作, 如果當(dāng)前socket無數(shù)據(jù)可讀,則立即返回EWOULBLOCK/EAGAIN,告訴調(diào)用read()者”數(shù)據(jù)還沒準(zhǔn)備好,你稍后再試”。

異步非阻塞調(diào)用中,稍有不同。調(diào)用函數(shù)在立即返回時(shí),還告訴調(diào)用者,這次請(qǐng)求已經(jīng)開始了。系統(tǒng)會(huì)使用另外的資源或者線程來完成這次調(diào)用操作,并在完成的時(shí)候知會(huì)調(diào)用者(比如通過回調(diào)函數(shù))。POSIX的aio_read()來說,調(diào)用它之后,函數(shù)立即返回,操作系統(tǒng)在后臺(tái)同時(shí)開始讀操作。即是將工作交給了內(nèi)核去完成這個(gè)操作。

在以上三種IO形式中,非阻塞異步是性能最高、伸縮性最好的。

兩種IO多路復(fù)用方案:Reactor and Proactor(基于同步和基于異步)

一般情況下,I/O 復(fù)用機(jī)制需要事件分享器(event demultiplexor)。 事件分享器的作用,即將那些讀寫事件源分發(fā)給各讀寫事件的處理者,就像送快遞的在樓下喊: 誰的什么東西送了, 快來拿吧。開發(fā)人員在開始的時(shí)候需要在分享器那里注冊(cè)感興趣的事件,并提供相應(yīng)的處理者(event handlers),或者是回調(diào)函數(shù); 事件分享器在適當(dāng)?shù)臅r(shí)候會(huì)將請(qǐng)求的事件分發(fā)給這些handler或者回調(diào)函數(shù)。

涉及到事件分享器的兩種模式稱為:Reactor andProactor。 Reactor模式是基于同步I/O的,而Proactor模式基于異步I/O相關(guān)的。

在Reactor模式中,事件分離者等待某個(gè)事件或者可應(yīng)用或個(gè)操作的狀態(tài)發(fā)生(比如文件描述符可讀寫,或者是socket可讀寫),等待后,分離者就把這個(gè)事件傳給事先注冊(cè)的事件處理函數(shù)或者回調(diào)函數(shù),由后者來做實(shí)際的讀寫操作。

而在Proactor模式中,事件處理者(或者代由事件分離者發(fā)起)直接發(fā)起一個(gè)異步讀寫操作(相當(dāng)于請(qǐng)求),而實(shí)際的工作是由操作系統(tǒng)來完成的。發(fā)起時(shí),需要提供的參數(shù)包括用于存放讀到數(shù)據(jù)的緩存區(qū),讀的數(shù)據(jù)大小,或者用于存放外發(fā)數(shù)據(jù)的緩存區(qū),以及這個(gè)請(qǐng)求完后的回調(diào)函數(shù)等信息。事件分離者得知了這個(gè)請(qǐng)求,它默默等待這個(gè)請(qǐng)求的完成,然后轉(zhuǎn)發(fā)完成事件給相應(yīng)的事件處理者或者回調(diào)。

這種異步模式的典型實(shí)現(xiàn)是基于操作系統(tǒng)底層異步API的,所以我們可稱之為“系統(tǒng)級(jí)別”的或者“真正意義上”的異步,因?yàn)榫唧w的讀寫是由操作系統(tǒng)代勞的。


舉另外個(gè)例子來更好地理解Reactor與Proactor兩種模式的區(qū)別。這里我們只關(guān)注read操作,因?yàn)閣rite操作也是差不多的。下面是Reactor的做法:

1.某個(gè)事件處理者宣稱它對(duì)某個(gè)socket上的讀事件很感興趣;

2.事件分離者等著這個(gè)事件的發(fā)生;

3.當(dāng)事件發(fā)生了,事件分離器被喚醒,這負(fù)責(zé)通知先前那個(gè)事件處理者;

4.事件處理者收到消息,于是去那個(gè)socket上讀數(shù)據(jù)了。

5.如果需要,它再次宣稱對(duì)這個(gè)socket上的讀事件感興趣,一直重復(fù)上面的步驟;


下面再來看看真正意義的異步模式Proactor是如何做的:

1.事件處理者直接投遞發(fā)一個(gè)寫操作(當(dāng)然,操作系統(tǒng)必須支持這個(gè)異步操作)。

2.這個(gè)時(shí)候,事件處理者根本不關(guān)心讀事件,它只管發(fā)這么個(gè)請(qǐng)求,它魂?duì)繅?mèng)縈的是這個(gè)寫操作的完成事件。

3.這個(gè)處理者很拽,發(fā)個(gè)命令就不管具體的事情了,只等著別人(系統(tǒng))幫他搞定的時(shí)候給他回個(gè)話。

4.事件分離者等著這個(gè)讀事件的完成(比較下與Reactor的不同);

5.當(dāng)事件分離者默默等待完成事情到來的同時(shí),操作系統(tǒng)已經(jīng)在一邊開始干活了,它從目標(biāo)讀取數(shù)據(jù),放入用戶提供的緩存區(qū)中,最后通知事件分離者,這個(gè)事情我搞完了;

6.事件分離者通知之前的事件處理者: 你吩咐的事情搞定了;

7.事件處理者這時(shí)會(huì)發(fā)現(xiàn)想要讀的數(shù)據(jù)已經(jīng)乖乖地放在他提供的緩存區(qū)中,想怎么處理都行了。

8.如果有需要,事件處理者還像之前一樣發(fā)起另外一個(gè)寫操作,和上面的幾個(gè)步驟一樣。

在沒有底層異步I/O API支持的操作系統(tǒng),這種方法可以幫我們隱藏掉socket接口的差異(無論是性能還是其它), 提供一個(gè)完全可用的統(tǒng)一“異步接口”。這樣我們就可以開發(fā)真正平臺(tái)獨(dú)立的通用接口了。


那么,綜上所述,這兩者的區(qū)別是什么呢?

簡(jiǎn)單直觀的理解:

1、Reactor模式是等待關(guān)心的動(dòng)作的發(fā)生后,將如何處理這個(gè)動(dòng)作的后續(xù)交給了用戶態(tài)的應(yīng)用本身來處理Reactor的事件分離器只關(guān)心事件的發(fā)生,其它的就完全交給應(yīng)用程序來處理了而Proactor模式則是只關(guān)心由操作系統(tǒng)(內(nèi)核create一個(gè)線程)完成異步非阻塞的操作后返回的結(jié)果;

2、Proactor場(chǎng)景中只能夠使用系統(tǒng)提供的異步非阻塞的syscall(系統(tǒng)調(diào)用)API,而Reactor的場(chǎng)景中更多地是使用同步非阻塞的syscall(系統(tǒng)調(diào)用);


事件分享器的兩種模式稱為:Reactor and Proactor . Reactor模式是基于同步I/O的,而Proactor模式是和異步I/O相關(guān)的

Reactor :

應(yīng)用啟動(dòng),將關(guān)注的事件handle注冊(cè)到Reactor中;
調(diào)用Reactor,進(jìn)入無限事件循環(huán),等待注冊(cè)的事件到來;
事件到來,select返回,Reactor將事件分發(fā)到之前注冊(cè)的回調(diào)函數(shù)中處理;
?


Proactor :

應(yīng)用程序啟動(dòng),調(diào)用異步操作處理器提供的異步操作接口函數(shù),調(diào)用之后應(yīng)用程序和異步操作處理就獨(dú)立運(yùn)行;應(yīng)用程序可以調(diào)用新的異步操作,而其它操作可以并發(fā)進(jìn)行;
應(yīng)用程序啟動(dòng)Proactor主動(dòng)器,進(jìn)行無限的事件循環(huán),等待完成事件到來;
異步操作處理器執(zhí)行異步操作,完成后將結(jié)果放入到完成事件隊(duì)列;
主動(dòng)器從完成事件隊(duì)列中取出結(jié)果,分發(fā)到相應(yīng)的完成事件回調(diào)函數(shù)處理邏輯中;

?

1.proactor是處理器發(fā)起異步處理事件,直接返回。

2.多路復(fù)用器等待事件完成后通知處理器,然后處理器處理緩沖區(qū)中的數(shù)據(jù)。

redis和nio都用的是多路復(fù)用器,多路復(fù)用器的思想就是reactor(同步非阻塞)
?

總結(jié)

以上是生活随笔為你收集整理的IO:Reactor和Proactor的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲欧美日本在线观看 | 校园伸入裙底揉捏1v1h | 免费久久一级欧美特大黄 | 色哟哟一区二区三区四区 | 99re这里只有精品首页 | 国产日韩精品一区二区三区 | 国产精品久久久久久久久免费 | 亚洲午夜精品一区二区三区 | 黄色一级大片在线免费看国产一 | 久久久久99精品成人片毛片 | 密臀久久 | 国产欧美日韩另类 | 午夜网站在线 | 亚洲成a| 免费在线观看一区二区三区 | 日日操夜夜 | 精品人伦一区二区三 | 亚洲国产精选 | 久久高清 | 在线观看中文字幕码 | 色欲国产精品一区二区 | 91亚洲精品视频 | 欧美日韩xxxx | 欧美91成人网 | 性折磨bdsm欧美激情另类 | 国产熟女高潮一区二区三区 | 大肉大捧一进一出好爽动态图 | 久久久久久九九九九 | 国产中文字幕在线免费观看 | 多毛的亚洲人毛茸茸 | 国产盗摄精品一区二区酒店 | 色多多在线视频 | 欧美熟妇一区二区 | 国产午夜精品福利视频 | 中文字幕第一页久久 | 欧美日本色 | 日韩精品在线观看中文字幕 | 亚洲图区综合 | 精品一区二区三区四区五区 | 一级少妇女片 | 五月天看片 | 日本不卡123| www.天天操.com | 日韩乱码人妻无码中文字幕久久 | 女同性恋一区二区三区 | 日韩免费av一区二区 | 超碰狠狠干 | 成人免费在线播放视频 | 综合久久99 | 成人性生交大片免费卡看 | 手机在线永久免费观看av片 | 熟妇人妻久久中文字幕 | 91丨九色丨蝌蚪丨丝袜 | 成人深夜在线观看 | 亚洲一区视频在线 | 黄频网站在线观看 | 美女张开腿让男人桶爽 | 国产高清自拍视频 | 不卡av免费在线观看 | 亚欧洲精品 | 永久免费AV无码网站韩国毛片 | 国产精品无码久久久久久电影 | 日韩特级黄色片 | 香蕉视频入口 | 欧美一区二区三区四区视频 | 99亚洲天堂 | 欧美福利视频在线 | 香蕉综合在线 | 久久久久久成人 | 免费福利小视频 | 亚洲色欧美 | 最新国产黄色网址 | 国产午夜电影 | 成品短视频泡芙 | 一级黄色短视频 | 久爱视频在线观看 | 麻豆成人免费 | 亚洲精品水蜜桃 | 毛片网站在线免费观看 | 欧美性xxxxx极品少妇 | 婷婷午夜精品久久久久久性色av | 亚洲黄页网站 | 色综合天 | 91精品久久久久久久久久久 | 波多野结衣在线观看视频 | 日韩黄色一级大片 | 国产精品一区二区三区免费看 | 欧美三级三级三级爽爽爽 | 国产一卡二卡在线播放 | 亚洲二级片 | 国产欧美视频一区二区 | 日本一区二区在线观看视频 | 狼性av懂色av禁果av | 综合视频在线 | 91精品国产一区二区三区蜜臀 | 日韩视频一区二区三区四区 | 伊人久艹| 国产乱xxⅹxx国语对白 | yy4138理论片动漫理论片 |