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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

转: IO设计模式:Reactor和Proactor对比

發(fā)布時間:2023/11/27 生活经验 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转: IO设计模式:Reactor和Proactor对比 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn):?https://segmentfault.com/a/1190000002715832

?

平時接觸的開源產(chǎn)品如Redis、ACE,事件模型都使用的Reactor模式;而同樣做事件處理的Proactor,由于操作系統(tǒng)的原因,相關(guān)的開源產(chǎn)品也少;這里學(xué)習(xí)下其模型結(jié)構(gòu),重點對比下兩者的異同點;

反應(yīng)器Reactor

Reactor模式結(jié)構(gòu)

Reactor包含如下角色:

  • Handle 句柄;用來標識socket連接或是打開文件;
  • Synchronous Event Demultiplexer:同步事件多路分解器:由操作系統(tǒng)內(nèi)核實現(xiàn)的一個函數(shù);用于阻塞等待發(fā)生在句柄集合上的一個或多個事件;(如select/epoll;)
  • Event Handler:事件處理接口
  • Concrete Event HandlerA:實現(xiàn)應(yīng)用程序所提供的特定事件處理邏輯;
  • Reactor:反應(yīng)器,定義一個接口,實現(xiàn)以下功能:
    1)供應(yīng)用程序注冊和刪除關(guān)注的事件句柄;
    2)運行事件循環(huán);
    3)有就緒事件到來時,分發(fā)事件到之前注冊的回調(diào)函數(shù)上處理;

“反應(yīng)”器名字中”反應(yīng)“的由來:

“反應(yīng)”即“倒置”,“控制逆轉(zhuǎn)”

具體事件處理程序不調(diào)用反應(yīng)器,而是由反應(yīng)器分配一個具體事件處理程序,具體事件處理程序?qū)δ硞€指定的事件發(fā)生做出反應(yīng);這種控制逆轉(zhuǎn)又稱為“好萊塢法則”(不要調(diào)用我,讓我來調(diào)用你)

業(yè)務(wù)流程及時序圖

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

Proactor模式

Proactor模式結(jié)構(gòu)

Proactor主動器模式包含如下角色

  • Handle 句柄;用來標識socket連接或是打開文件;
  • Asynchronous Operation Processor:異步操作處理器;負責(zé)執(zhí)行異步操作,一般由操作系統(tǒng)內(nèi)核實現(xiàn);
  • Asynchronous Operation:異步操作
  • Completion Event Queue:完成事件隊列;異步操作完成的結(jié)果放到隊列中等待后續(xù)使用
  • Proactor:主動器;為應(yīng)用程序進程提供事件循環(huán);從完成事件隊列中取出異步操作的結(jié)果,分發(fā)調(diào)用相應(yīng)的后續(xù)處理邏輯;
  • Completion Handler:完成事件接口;一般是由回調(diào)函數(shù)組成的接口;
  • Concrete Completion Handler:完成事件處理邏輯;實現(xiàn)接口定義特定的應(yīng)用處理邏輯;

業(yè)務(wù)流程及時序圖

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

對比兩者的區(qū)別

主動和被動

以主動寫為例:

  • Reactor將handle放到select(),等待可寫就緒,然后調(diào)用write()寫入數(shù)據(jù);寫完處理后續(xù)邏輯;
  • Proactor調(diào)用aoi_write后立刻返回,由內(nèi)核負責(zé)寫操作,寫完后調(diào)用相應(yīng)的回調(diào)函數(shù)處理后續(xù)邏輯;

可以看出,Reactor被動的等待指示事件的到來并做出反應(yīng);它有一個等待的過程,做什么都要先放入到監(jiān)聽事件集合中等待handler可用時再進行操作;
Proactor直接調(diào)用異步讀寫操作,調(diào)用完后立刻返回;

實現(xiàn)

Reactor實現(xiàn)了一個被動的事件分離和分發(fā)模型,服務(wù)等待請求事件的到來,再通過不受間斷的同步處理事件,從而做出反應(yīng);

Proactor實現(xiàn)了一個主動的事件分離和分發(fā)模型;這種設(shè)計允許多個任務(wù)并發(fā)的執(zhí)行,從而提高吞吐量;并可執(zhí)行耗時長的任務(wù)(各個任務(wù)間互不影響)

優(yōu)點

Reactor實現(xiàn)相對簡單,對于耗時短的處理場景處理高效;
操作系統(tǒng)可以在多個事件源上等待,并且避免了多線程編程相關(guān)的性能開銷和編程復(fù)雜性;
事件的串行化對應(yīng)用是透明的,可以順序的同步執(zhí)行而不需要加鎖;
事務(wù)分離:將與應(yīng)用無關(guān)的多路分解和分配機制和與應(yīng)用相關(guān)的回調(diào)函數(shù)分離開來,

Proactor性能更高,能夠處理耗時長的并發(fā)場景;

缺點

Reactor處理耗時長的操作會造成事件分發(fā)的阻塞,影響到后續(xù)事件的處理;

Proactor實現(xiàn)邏輯復(fù)雜;依賴操作系統(tǒng)對異步的支持,目前實現(xiàn)了純異步操作的操作系統(tǒng)少,實現(xiàn)優(yōu)秀的如windows IOCP,但由于其windows系統(tǒng)用于服務(wù)器的局限性,目前應(yīng)用范圍較小;而Unix/Linux系統(tǒng)對純異步的支持有限,應(yīng)用事件驅(qū)動的主流還是通過select/epoll來實現(xiàn);

適用場景

Reactor:同時接收多個服務(wù)請求,并且依次同步的處理它們的事件驅(qū)動程序;
Proactor:異步接收和同時處理多個服務(wù)請求的事件驅(qū)動程序;

參考

《面向模式的軟件體系結(jié)構(gòu) 卷2》
《面向模式的軟件架構(gòu) 卷4》

轉(zhuǎn)載于:https://www.cnblogs.com/jhj117/p/5823272.html

總結(jié)

以上是生活随笔為你收集整理的转: IO设计模式:Reactor和Proactor对比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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