Calvin's Tech Space

          成于堅忍,毀于浮躁

             :: 首頁 :: 聯系 :: 聚合  :: 管理
              首先糾正一個觀點,NIO的目的不是在單個IO的時候快過普通I/O,而是在并發多個I/O的時候減少線程的使用量,從而提高整個系統的可伸縮性,因此主要用于提高并發處理的能力(能同時服務于更多的客戶,而資源消耗最小),而不是提升速度. 

              Nonblocking I/O is primarily relevant to network connections. Pipe channels that move data between two threads also support nonblocking I/O. File channels don't support it at all because file access doesn't block nearly as often as network channels do, and most modern disk controllers can fill a CPU with data fast enough to keep it satisfied. Furthermore, it's uncommon for one program to read or write hundreds of files simultaneously. However, on network servers, this usage pattern is the rule, not the exception.(來自Java™ I/O, 2nd Edition)


          主要包:

          java.nio

          定義了Buffer及其數據類型相關的子類。其中被java.nio.channels中的類用來進行IO操作的ByteBuffer的作用非常重要。

          java.nio.channels

          定義了一系列處理IO的Channel接口以及這些接口在文件系統和網絡通訊上的實現。這個包通過Selector和SelectableChannel這兩個類,還定義了一個進行異步(non-blocking)IO操作的API,這對需要高性能IO的應用非常重要。這個包可以說是NIO API的核心。

          java.nio.channels.spi

          定義了可用來實現channel和selector API的抽象類。

          java.nio.charset

          定義了處理字符編碼和解碼的類。

          java.nio.charset.spi

          定義了可用來實現charset API的抽象類。

          java.nio.channels.spi和java.nio.charset.spi這兩個包主要被用來對現有NIO API進行擴展,在實際的使用中,我們一般只和另外的3個包打交道。

          詳細API講解參見http://dev.csdn.net/article/58/58120.shtm

          反應器模式(Reactor pattern)

          NIO 設計背后的基石是反應器設計模式。 分布式系統中的服務器應用程序必須處理多個向它們發送服務請求的客戶機。然而,在調用特定的服務之前,服務器應用程序必須將每個傳入請求多路分用并分派到各自相應的服務提供者。反應器模式正好適用于這一功能。它允許事件驅動應用程序將服務請求多路分用并進行分派,然后,這些服務請求被并發地從一個或多個客戶機傳送到應用程序。  

          反應器模式的核心功能:

          將事件多路分用
          將事件分派到各自相應的事件處理程序

          Selector機制

          Selector是一個“多路復用器”,負責統一各個處理程序的消息注冊,統一接收客戶端或服務器消息信息,再分發給不同的事件處理程序進行處理。整個流程就一個注冊->接收->處理的過程.

          Selector作為一個樞紐中心目的就是為高效復用提供基礎,開過多Selector基本說明設計或使用上存在問題,這篇文章詳細分析了selector機制。(http://blog.csdn.net/haoel/archive/2008/03/27/2224055.aspx)

          相關資料
          http://rox-xmlrpc.sourceforge.net/niotut/index.html
          指出了一些設計原則和一個基于NIO的C/S程序。

          http://onjava.com/onjava/2002/09/04/nio.html



          posted on 2009-12-24 22:27 calvin 閱讀(272) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 北碚区| 五莲县| 岳阳市| 游戏| 镇雄县| 纳雍县| 哈尔滨市| 乌兰察布市| 武夷山市| 延边| 沂水县| 黎平县| 吕梁市| 平安县| 西乌珠穆沁旗| 吐鲁番市| 柳河县| 阿荣旗| 高邮市| 福建省| 唐河县| 建瓯市| 嵊泗县| 崇阳县| 凯里市| 西华县| 饶阳县| 新和县| 日喀则市| 阳春市| 霍州市| 镇原县| 开江县| 平泉县| 安化县| 昌都县| 抚顺县| 肥西县| 资源县| 武山县| 肇源县|