1. 程式人生 > >《Netty權威指南》(二)NIO 入門

《Netty權威指南》(二)NIO 入門

目錄

 

2.3 NIO 程式設計

NIO 官方稱為 New I/O,目標是要讓 Java 支援非阻塞 I/O,所以通常也叫非阻塞 I/O(Non-blocking I/O)。

阻塞模式使用非常簡單,但是效能和可靠性都不好,非阻塞模式則正好相反。一般來說,低負載、低併發的應用程式可以選擇同步阻塞 I/O 以降低程式設計複雜度;對於高負載、高併發的網路應用,需要使用 NIO 的非阻塞模式進行開發。

2.3.1 Buffer、Channel、Selector

    1. 緩衝區 Buffer

Buffer 是一個物件,它包含一些要寫入或者要讀出的資料。在 NIO 庫中,所有資料都是用緩衝區處理的。在讀取資料時,它是直接從緩衝區讀取;在寫入資料時,寫入到緩衝區。

    1. 通道 Channel

網路資料通過 Channel 讀取和寫入。通道與流的不同之處在於通道是雙向的,流只是在一個方向移動,而通道可用於讀、寫或者二者同時進行。

因為 Channel 是全雙工的,所以它可以比流更好地對映底層作業系統的 API。

    1. 多路複用器

多路複用器提供選擇已經就緒的任務的能力。Selector 會不斷地輪詢註冊在其上的 Channel,如果某個 Channel 上面發生讀或者寫事件,這個 Channel 就處於就緒狀態,會被 Selector 輪詢出來,然後通過 SelectionKey 可以獲取就緒 Channel 的集合,進行後續的 I/O 操作。