<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## Proactor模型 在 Reactor 模式中,Reactor 等待某個事件或者可應用或者操作的狀態發生(比如文件描述符可讀寫,或者是 Socket 可讀寫)。 然后把這個事件傳給事先注冊的 Handler(事件處理函數或者回調函數),由后者來做實際的讀寫操作。 其中的讀寫操作都需要應用程序同步操作,所以 Reactor 是非阻塞同步網絡模型。 如果把 I/O 操作改為異步,即交給操作系統來完成就能進一步提升性能,這就是異步網絡模型 Proactor ![](https://img.kancloud.cn/24/ab/24ab9167c1548481bd8c9ff937ba6bb5_841x473.png) Proactor 是和異步 I/O 相關的,詳細方案如下: 1)Proactor Initiator 創建 Proactor 和 Handler 對象,并將 Proactor 和 Handler 都通過 AsyOptProcessor(Asynchronous Operation Processor)注冊到內核; 2)AsyOptProcessor 處理注冊請求,并處理 I/O 操作; 3)AsyOptProcessor 完成 I/O 操作后通知 Proactor; 4)Proactor 根據不同的事件類型回調不同的 Handler 進行業務處理; 5)Handler 完成業務處理 ### Proactor和Reactor的區別 1)Reactor 是在事件發生時就通知事先注冊的事件(讀寫在應用程序線程中處理完成); 2)Proactor 是在事件發生時基于異步 I/O 完成讀寫操作(由內核完成),待 I/O 操作完成后才回調應用程序的處理器來進行業務處理。 理論上 Proactor 比 Reactor 效率更高,異步 I/O 更加充分發揮 DMA(Direct Memory Access,直接內存存取)的優勢。 但是Proactor有如下缺點: 1)編程復雜性,由于異步操作流程的事件的初始化和事件完成在時間和空間上都是相互分離的,因此開發異步應用程序更加復雜。應用程序還可能因為反向的流控而變得更加難以 Debug; 2)內存使用,緩沖區在讀或寫操作的時間段內必須保持住,可能造成持續的不確定性,并且每個并發操作都要求有獨立的緩存,相比 Reactor 模式,在 Socket 已經準備好讀或寫前,是不要求開辟緩存的; 3)操作系統支持,Windows 下通過 IOCP 實現了真正的異步 I/O,而在 Linux 系統下,Linux 2.6 才引入,目前異步 I/O 還不完善。 因此在 Linux下實現高并發網絡編程都是以 Reactor 模型為主
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看