<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] # Unix的IO模型 * **異步I/O** 是指用戶程序發起IO請求后,不等待數據,同時操作系統內核負責I/O操作把數據從內核拷貝到用戶程序的緩沖區后通知應用程序。數據拷貝是由操作系統內核完成,用戶程序從一開始就沒有等待數據,發起請求后不參與任何IO操作,等內核通知完成。 * **同步I/O** 就是非異步IO的情況,也就是用戶程序要參與把數據拷貝到程序緩沖區(例如java的InputStream讀字節流過程)。 * **同步IO里的非阻塞** 是指用戶程序發起IO操作請求后不等待數據,而是調用會立即返回一個標志信息告知條件不滿足,數據未準備好,從而用戶請求程序繼續執行其它任務。執行完其它任務,用戶程序會主動輪詢查看IO操作條件是否滿足,如果滿足,則用戶程序親自參與拷貝數據動作。 ![](https://box.kancloud.cn/b13ac1449b1506177693ed9b828b6f23_450x157.png) ![](https://box.kancloud.cn/2fd1bf6a6019e4850fa4ebac4a613d69_586x320.png) 簡單說,Unix IO模型的語境下,同步和異步的區別在于數據拷貝階段是否需要完全由操作系統處理。阻塞和非阻塞操作是針對發起IO請求操作后是否有立刻返回一個標志信息而不讓請求線程等待。基于這個語境,Netty目前的版本是沒有把IO操作交過操作系統處理的,所以是屬于同步的。對于網上大部分文章,如果別人說Netty是異步非阻塞,如果要深究,那真要看看Netty新的版本是否把IO操作交過操作系統處理,或者看看有否使用JDK1.7中的AIO API,否則他們說的異步其實是指**客戶端程序調用Netty的IO操作API“不停頓等待”。** ===== 其次,在Java的IO模型里: JDK的各個歷史版本引入如下概念。 **BIO**: Blocking IO **NIO**:Non Blocking IO 或者 New IO **AIO**:Asynchronous IO 或者 NIO2 這里的AIO應該就對應著Unix模型里的異步IO,也就是IO操作交給操作系統處理,充分調用OS參與并發操作,確實是操作系統的異步IO機制。 而BIO和NIO簡單對比就是,NIO解決了BIO的痛點,把BIO中請求IO過程中的兩步(請求連接+連接有真實IO請求時候的處理過程)分離開來,不讓一個線程負責這兩步。NIO就是一個線程負責所有請求連接但不處理IO操作,該線程只負責把連接注冊到多路復用器上,多用復用器輪詢到連接有IO請求時候再啟動其它線程處理IO請求操作。 注意一點,Netty線程模型提及很多IO線程池,每條IO線程在進行IO操作(IO條件滿足進行真正讀寫數據)時候雖然也是要消耗操作時間,但這種情況是否應該叫阻塞,取決于該IO線程有沒有阻塞業務請求線程,當且僅當所有的IO線程在重度負載情形下(IO線程池所有IO線程在工作)導致業務請求線程提交不了新請求的情形下才叫IO線程的IO操作阻塞了業務線程的IO請求。由此可知,NIO也會產生BIO的情況。
                  <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>

                              哎呀哎呀视频在线观看