Java對多路複用I/O技術的支持

Java對多路複用I/O技術的支持

一、重要概念:Channel
    Channel通道,是一個用來完成應用程序和操作系統交互事件、傳遞內容的渠道,注意是連接到操作系統。一個通道會有一個專屬的文件狀態描述符。既然是和操作系統進行內容的傳遞,那就說明應用程序可以通過通道從操作系統讀取數據,也可以通過通道向操作系統寫數據。
    所有被Selector(選擇器)註冊的通道,只能是繼承了SelectableChannel類的子類。其中有幾個關鍵的Channel通道實現,需要進行說明。
    1、ServerSocketChannel:應用服務器端的監聽通道。只有通過這個通道,應用程序才能向操作系統註冊支持“多路複用I/O”的端口監聽。它同時支持UDP協議和TCP協議。
    2、SocketChannel:TCP Socket套接字的監聽通道,一個Socket套接字對應了一個客戶端(IP和端口)到服務器端(IP和端口)的通信連接。
    3、DatagramChannel:UDP數據報文的監聽通道。
二、重要概念:Buffer
    數據緩存區:在Java原生NIO框架中,爲了保證每個通道的數據通道讀/寫速度,Java NIO框架爲每一種需要支持數據讀/寫的通道集成了Buffer的支持。例如:ServerSocketChannel通道只支持OP_ACCEPT事件的監聽,它是不能直接進行網絡數據內容的讀/寫的,所以ServerSocketChannel是沒有集成Buffer的。
    Buffer有兩種工作模式:寫模式和讀模式。在讀模式下,應用程序只能從Buffer中讀取數據,不能進行寫操作。但是在寫模式下,應用程序是可以進行讀操作的,這就表示可能會出現髒讀的情況。所以一旦決定要從Buffer中讀取數據,就一定要將Buffer的狀態改爲讀模式。
    1.position:緩存區目前正在操作的數據塊位置。
    2.limit:緩存區最大可以進行操作的位置。緩存區的讀/寫狀態正是由這個屬性控制的。
    3.capacity:緩存區的最大容量。這個容量實在緩存區創建時進行制定的。由於高併發時通道數量往往會很龐大,所以每一個緩存區的容量最好不要過大。
三、重要概念:Selector
    1.事件訂閱和Channel管理:應用程序將向Selector對象註冊需要它關注的Channel,以及具體的某一個Channel會對哪些I/O事件感興趣。Selector中也會維護一個“已經註冊的Channel”的容器。
    2.輪詢代理:應用層不再通過阻塞模式或者非阻塞模式直接詢問操作系統“事件有沒有發生”,而是由Selector代其詢問。
    3.實現不同操作系統的支持:多路複用I/O技術是需要操作系統進行支持的,其特點就是操作系統可以同時掃描同一個端口的多個網絡連接。所以作爲上層的JVM,必須要爲不同操作系統的多路複用I/O實現編寫不同的代碼。
發佈了25 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章