<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] > 本節總結一下,我們在學習Socket編程的時候,需要知道的一些基礎性概念。 ## 什么是NIO ![](https://img.kancloud.cn/72/38/72382626bae77ad1aff38b434364ffe8_244x172.png) `NIO(non-blocking)`,使用較少的Thread線程,通過Selector選擇器來執行不同Channel通道中的任務,執行的任務再結合AIO(異步I/O)就能發揮服務器最大的性能,大大提升軟件運行效率。 ### 解釋一下NIO為啥叫做同步非阻塞 同步和異步關注的是消息通信機制,阻塞和非阻塞關注的是程序在等待調用結果時的狀態。 首先一個I/O操作其實分成了兩個步驟: 1. 發起I/O請求——關注程序在等待調用結果時的狀態(調度過程);NIO在調度過程中是非阻塞的,無需等待線程執行完讀寫; 2. 實際的I/O操作——關注消息通信機制。NIO線程處理由selector分配的任務過程是同步的。 ### NIO性能為什么好? > 結合緩沖區~ #### 1. 零拷貝 NIO零拷貝適用于以下場景: 1. 文件較大,讀寫較慢,追求速度 2. JVM內存不足,不能加載太大數據 3. 內存帶寬不夠,即存在其他程序或線程存在大量的IO操作,導致帶寬本來就小 #### 2. 直接內存映射 ![](https://img.kancloud.cn/d5/d3/d5d3941388943a2144a6b257231b4bc4_511x383.png) 直接內存,目的是防止Java堆和Native堆之間數據復制帶來的性能損耗,此后NIO可以使用Native的方式直接在 Native堆分配內存。 ### 使用直接內存的原因 1. 對垃圾回收停頓的改善。因為full gc時,垃圾收集器會對所有分配的堆內內存進行掃描,垃圾收集對Java應用造成的影響,跟堆的大小是成正比的。過大的堆會影響Java應用的性能。如果使用堆外內存的話,堆外內存是直接受操作系統管理。這樣做的結果就是能保持一個較小的JVM堆內存,以減少垃圾收集對應用的影響。(full gc時會觸發堆外空閑內存的回收。) 2. 減少了數據從JVM拷貝到native堆的次數,在某些場景下可以提升程序I/O的性能。 3. 可以突破JVM內存限制,操作更多的物理內存。 ## 通道(Channel) 通道是用于I/O操作的連接,更具體地講,通道代表數據到硬件設備、文件、網絡套接字的連接。通道可處于打開或關閉這兩種狀態,當創建通道時,通道就處于打開狀態,一旦將其關閉,則保持關閉狀態。一旦關閉了某個通道,則試圖對其調用I/O操作時就會導致ClosedChannel Exception異常被拋出,但可以通過調用通道的isOpen()方法測試通道是否處于打開狀態以避免出現ClosedChannelException異常。一般情況下,通道對于多線程的訪問是安全的。 ## 單播、廣播、多播 - 單播。所謂的單播大多數都是點對點式的網絡,如打開網頁、發送郵件和兩人網絡聊天等情況,都是在使用點對點方式傳輸數據。 - 廣播。廣播是一種一對多的形式,是對網絡中所有的計算機發送數據,不區分目標,這就極易造成網絡中存在大量無用的垃圾通信數據,造成“廣播風暴”,使網絡變慢,嚴重時網絡會徹底癱瘓。 - 多播也稱為組播,它也是一種一對多的網絡。從組播的名字來看,它可以對某些計算機分配多播類型的IP地址以進行分組,然后只針對這些計算機發送數據,這就是多播。
                  <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>

                              哎呀哎呀视频在线观看