Reactor模型與Proactor模型的區(qū)別是什么

本篇文章給大家分享的是有關(guān)Reactor模型與Proactor模型的區(qū)別是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

官渡ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書(shū)未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書(shū)銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書(shū)合作)期待與您的合作!

Reactor模型

它是同步非阻塞模型。也稱為Dispatcher模型。想想如果每一個(gè)連接過(guò)來(lái)我們都得建一個(gè)線程來(lái)處理這個(gè)連接,那連接一多線程不得爆滿,那可能有人說(shuō)上線程池,對(duì)線程池肯定是要上的。但這只能解決線程數(shù)的問(wèn)題,但還有一個(gè)問(wèn)題就是資源利用率的問(wèn)題,當(dāng)連接沒(méi)斷開(kāi)的時(shí)候,當(dāng)這個(gè)連接暫時(shí)沒(méi)請(qǐng)求的時(shí)候你的線程是不是得阻塞著等著請(qǐng)求呀,那線程等于還是被人占用了,別的連接有請(qǐng)求的時(shí)候也用不到這個(gè)線程,資源的浪費(fèi)啊,性能低啊。

那如何解決這個(gè)問(wèn)題呢?

當(dāng)然是等連接有請(qǐng)求的時(shí)候線程再上去處理。那這個(gè)事情得找個(gè)“人”來(lái)做,咱們業(yè)務(wù)線程就處理業(yè)務(wù),就是得有個(gè)“人”來(lái)管理所有的連接,他發(fā)現(xiàn)哪個(gè)連接有請(qǐng)求了就分配業(yè)務(wù)線程來(lái)處理。

這就叫Reactor模型。上面說(shuō)的那個(gè)"人"我們稱為reactor,中文翻譯時(shí)反應(yīng)堆的意思,也就是他就是那個(gè)監(jiān)視的人,如果有情況來(lái)了他就有所反應(yīng),分發(fā)任務(wù)給業(yè)務(wù)線程處理。

可以有單Reactor單線程,單Reactor多線程,多Reactor多線程

單Reactor單線程

Reactor模型與Proactor模型的區(qū)別是什么

select會(huì)一直監(jiān)聽(tīng)著事件,事件來(lái)了之后給dispatch分發(fā),如果建立請(qǐng)求的事件則分配的acceptor,由acceptor創(chuàng)建一個(gè)handler來(lái)處理后續(xù)的業(yè)務(wù),如果不是建立請(qǐng)求的事件則分配個(gè)之前對(duì)應(yīng)的handler來(lái)處理后續(xù)業(yè)務(wù)

這個(gè)情況的優(yōu)點(diǎn)就是簡(jiǎn)單。。。沒(méi)有多線程共享資源爭(zhēng)搶導(dǎo)致的問(wèn)題。缺點(diǎn)就是就單線程,浪費(fèi)了多CPU,并且同一時(shí)刻只有一個(gè)handler能處理,其他的得等著。

聽(tīng)起來(lái)好像沒(méi)啥用啊這樣,是的絕大部分場(chǎng)景不適合,但是redis就是這樣用的。因?yàn)樗幚順I(yè)務(wù)夠快。所以這種適合在業(yè)務(wù)處理極快的情況下使用。

單Reactor多線程

Reactor模型與Proactor模型的區(qū)別是什么

當(dāng)業(yè)務(wù)處理不快就上多線程咯。

這個(gè)模式和上面的區(qū)別就在于具體業(yè)務(wù)實(shí)現(xiàn)不由handler處理的,handler只負(fù)責(zé)read數(shù)據(jù),將數(shù)據(jù)給業(yè)務(wù)線程,然后業(yè)務(wù)線程處理完畢之后返回結(jié)果給handler,由handler send給客戶端。

這個(gè)模式的優(yōu)點(diǎn)就是可以充分利用CPU,適合業(yè)務(wù)處理不快的情況。缺點(diǎn)就是多線程之間共享資源的爭(zhēng)搶產(chǎn)生的問(wèn)題,并且只有一個(gè)Reactor來(lái)監(jiān)聽(tīng)并響應(yīng),當(dāng)請(qǐng)求量太大時(shí),一個(gè)Reactor可能會(huì)成為性能瓶頸。

多Reactor多線程

所以多Reactor多線程就來(lái)啦。

Reactor模型與Proactor模型的區(qū)別是什么

mainReactor主要用來(lái)接受連接,由連接來(lái)就給acceptor,acceptor將新的連接分配個(gè)某個(gè)subReactor,然后這個(gè)subReactor將其加入自己的監(jiān)聽(tīng)列表,并創(chuàng)建一個(gè)handler來(lái)處理這個(gè)連接。之后就都由這個(gè)subReactor來(lái)select監(jiān)聽(tīng)來(lái)響應(yīng)這個(gè)連接的請(qǐng)求,然后dispatch給對(duì)應(yīng)的handler來(lái)read,業(yè)務(wù)處理,send。mainReactor就不管啦。

所以這種方案就等于主Reactor分流了,只有新的連接由主Reactor接受,老的連接都分給了subReactor來(lái)響應(yīng)。

Proactor模型

它是異步非阻塞模型。中文翻譯為前攝器。。不知道啥玩意,可以稱之為主動(dòng)器。也就是我們不必等待I/O數(shù)據(jù)準(zhǔn)備好也就是內(nèi)核緩存已經(jīng)讀數(shù)據(jù)到用戶空間。這一切都有內(nèi)核來(lái)幫我們搞定,數(shù)據(jù)準(zhǔn)備好了之后就通知Proactor,然后Proactor就調(diào)用相應(yīng)的Handler進(jìn)行業(yè)務(wù)處理。相對(duì)于Reactor省去了遍歷事件通知隊(duì)列selector 的代價(jià)。

Reactor模型與Proactor模型的區(qū)別是什么

由initiator創(chuàng)建handler和proactor并通過(guò)Asynchronous Operation Processor注冊(cè)到內(nèi)核,然后Asynchronous Operation Processor完成I/O會(huì)通知proactor,proactor再調(diào)用對(duì)應(yīng)的handler處理業(yè)務(wù)。

所以理論上Proactor的效率比Reactor高,但是linux并沒(méi)有真正的實(shí)現(xiàn)Proactor模型,而是epoll模擬出Proactor模型。

以上就是Reactor模型與Proactor模型的區(qū)別是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

當(dāng)前名稱:Reactor模型與Proactor模型的區(qū)別是什么
文章網(wǎng)址:http://bm7419.com/article26/jcidjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站做網(wǎng)站、域名注冊(cè)、關(guān)鍵詞優(yōu)化、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)