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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] > ### `IO`模型 * 1、**阻塞式 IO`** * 客戶端發起了`connect`請求,那么當前線程就會休眠,阻塞在調用處,等待服務端響應完畢,返回消息,才會繼續執行下去。 ![](https://i.loli.net/2019/03/15/5c8affeddc96d.png) * 2、**非阻塞式 IO** * 客戶端程序會不停地去嘗試讀取數據,但是不會阻塞在調用讀的方法處,如果讀的時候,沒有讀到內容,也會立即返回。 ![](https://i.loli.net/2019/03/15/5c8b00b819545.png) * 3、**IO多路復用** * 最常用的`I/O`事件通知機制就是`I/O`復用(I/O multiplexing)。Linux 環境中使用`select/poll/epoll_wait `實現`I/O`復用。 ![](https://i.loli.net/2019/03/15/5c8b01a774733.png) <br/> > ### `NIO` * 非阻塞同步 * `channel`通道,與傳統`IO`中的流(Stream)類似,但通道是雙向的,而`Stream`是單向的,輸入流只負責輸入,輸出流只負責輸出。唯一能與通道交互的組件是緩沖器(Buffer),通過通道,可以從緩沖器中讀寫數據。用戶可以通過選擇器`Selector`管理通道`Channel`,如可在一個選擇器上注冊多個通道,然后通過這個選擇器來管理多個通道的讀寫操作。 * `Buffer`緩沖器 * `Selector`選擇器 <br/> > ### `IO`與`NIO`的區別 * `IO`是面向流`Stream`,`NIO`是面向緩沖區`Buffer`。 * | BIO | NIO | | --- | --- | |一個連接對應一個線程|一個連接的有效請求對應一個線程| | `IO`面向流(Stream),只能順序的從流中讀取數據,如果想跳躍性的讀取或再讀取已經讀過的內容,就必須把流中讀到的數據緩存起來| `NIO`面向緩存(Buffer),而不是面向流操作,所以可以跳躍讀取或者反復讀取 ||| | | `IO`是阻塞的,如調用`InputStreram.read()`方法時,它會一直等到數據到來時(或超時)才會繼續執行后續代碼,否則就會一直等待| 讀寫操作具有非阻塞性,如從某通道讀取數據時,僅能得到當前可用數據,如果當前沒有數據,就什么都不會讀取,而且代碼能繼續執行。非阻塞寫也是如此。 | | `NIO`的`selectors`組件允許一個線程(即一個Java類)監控多個來源(channels),也就是說通過一個線程管理多個輸入和輸出通道。 <br/> <br/> *** 參考: [Java NIO系列教程(一) Java NIO 概述](https://www.cnblogs.com/duanxz/p/6759689.html) [BIO與NIO、AIO的區別](https://blog.csdn.net/skiof007/article/details/52873421) [如何學習Java的NIO](https://www.zhihu.com/question/29005375/answer/184849551) [NIO原理詳解](https://blog.csdn.net/charjay_lin/article/details/81810922)
                  <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>

                              哎呀哎呀视频在线观看