1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          reactor(Reactor的原理及結構是什么)

          來源:互聯網轉載 時間:2024-05-12 06:02:58

          雖然在Java中沒有真的IO多路復用模型,但是Reactor就是NIO實現多路復用的一種模式。

          Reactor是什么

          Reactor設計模式是一種事件處理模式,用于處理通過一個或多個輸入同時交付給服務處理程序的服務請求。然后,服務處理程序對傳入的請求進行多路分解,并將它們同步分發到關聯的請求處理程序。

          從上述表述中我們大致可以總結出:

          • 基于事件驅動
          • 可以處理一個或多個輸入源
          • 通過ServiceHandler同時將輸入事件采用多路復用分發給相應的RequestHandler(多個)處理

          對應我們的NIO中的實現:

          • 同步的等待多個事件源(Event)到達(采用select()實現)
          • 將事件多路分解以及分配相應的事件服務進行處理,這個分派采用server集中處理(Dispatch)
          • 分解的事件以及對應的事件服務應用從分派服務中分離出去(RequestHandler)
          Reactor結構

          上述Reactor模型主要涉及的類有:

          • InitiationDispatcher:EventHandler的容器,用來注冊、移除EventHandler等;另外,它作為Reactor模式的入口調用SynchronousEventDemultiplexer的select方法以阻塞等待事件的返回,當阻塞事件返回時,將事件發生的Handle分發到相應的EventHandler處理。
          • EvenHandler:定義了事件處理的方法。
          • Handle:即操作系統中的句柄,是對資源在操作系統層面上的一種抽象,它可以是打開的文件、一個連接Socket等。
          • SynchronousEventDemultiplexer:使用一個事件循環,以阻止所有的資源。當可以啟動一個同步操作上的資源不會阻塞,多路分解器發送資源到分發器
          Reactor時序圖
          1. 初始化InitiationDispatcher,并初始化一個Handler到EventHandler的Map
          2. 注冊EventHandler到InitiationDispatcher,每個EventHandler包含Handler的引用,從而建立Handler到EventHandler的映射
          3. 調用InitiationDispatcher的handle_events()方法啟動EventLoop,在EventLoop中調用select()方法(SynchronousEventDemultiplexer)阻塞等待Event發生
          4. 當某個或某些Handler的Event發生以后,select()方法返回,InitiationDispatcher根據返回的Hanler找到注冊的EventHandler,并回調該EventHandler的handler_event方法
          5. 在EventHandler的handler_event()方法中還可以向InitiationDispatcher中注冊新的EventHandler,比如對AcceptorEventHandler來說,當有新的client連接時,它會產生新的EventHandler以處理新的連接,并注冊到InitiationDispatcher中。
          Reactor
          Reactor單線程模型

          最基本的單線程Reactor模型,Reactor負責多路分離套接字(阻塞并且當事件觸發時進行分發),當有新連接觸發到CONNECT事件后,交由Accptor處理,有IO讀寫事件交由Handler處理。

          Accceptor負責獲取與客戶端建立的SocketChannel,綁定對應的EventHandler,當該SocketChannel上有事件發生時就可以獲取到對應的EventHandler并進行處理。

          單Reactor多線程模型

          相對于單Reactor模型,我們在獲取到IO事件以后可以交由線程池處理,可以減少Reactor線程的消耗,Reactor從而更加專注的關注于事件的分發。

          多Reactor多線程模型
          • mainReactor負責監聽ServerSocket,用來處理新連接的建立,通常單線程就可以處理,將建立的SocketChannel指定注冊給subReactor。
          • subReactor(它的個數一般是和CPU個數等同)維護自己的selector,基于mainReactor注冊的socketChannel多路分離IO讀寫事件,讀寫網絡數據,對業務處理的功能,將其扔給worker線程池來完成。

          關于Reactor的原理及結構是什么問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注本站行業資訊頻道了解更多相關知識。

          標簽:reactor-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          利息調整怎么理解?通常情況下,我們說的利息調整指的是,按實際本金和實際利率計算的利息與按票面面值和票面利率計算的利息的差額。通俗的來說就是,實際利率和票面利率之前的差額。簡單來說,利息調整的計算依據就是根據實際利率下的攤余成本法來計算的。利息變動調整方式在降息或者加息的情況下,房貸利率調整有三種方式:1、一種是次年調,銀行利率調整后,次年1月1日開始執行新利率;2、一種是按年度調,從貸款人的貸款日...

          大量股票解禁反而暴漲咋回事?股票跌漲不由解禁決定,且股票公開不代表控股股東立刻減持,股票跌漲由供求關系求、資金額、銷售績業、政策、消息等各個方面因素決定。股票解禁代表著大量的非流通股可以進行流通,減持需要提早傳出公示,非流通股占總股本5%以上的,一般需 要2年以上才可以減持,非流通股占總股本小于5%的,一般規定在一年之后才可以減持。解禁股票當天一般漲還是跌?跌,股票解禁后第一天一般是下跌,下跌的概...

          紙黃金開盤時間是什么時候?紙黃金是24小時交易的,但不同時點行情會不同,以下是紙黃金交易時間和活躍狀況:1、早5-14點亞洲市場開盤,其推動力量較小,一般行情震蕩幅度較小。2、午間14-18點為歐洲上午市場。3、傍晚18-20點為歐洲的中午休息和美洲市場的清晨,行情波動變大。4、20--24點為歐洲市場的下午盤和美洲市場的上午盤,行情波動較大。5、24點后到清晨,為美國的下午盤,一般此時已經走出了...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>