1. 程式人生 > >Netty進階基礎篇之流概念篇(1)

Netty進階基礎篇之流概念篇(1)

序言:學Netty之前,對流的概念應該深刻一些,所以先理解一下流的使用!

1、IO、NIO、AIO 含義區別

1.1 同步阻塞I/O(BIO block io)

jdk1.4之前就一個io流,伺服器實現模式為一個連線一個執行緒,即客戶端有連線請求時伺服器就需要啟動一個執行緒進行處理,如果這個連線不做任何事情會造成不必要的執行緒開銷,可以通過執行緒池機制來改善。BIO方式適用於連線數目比較小且固定的架構,這種方式對服務端資源要求比較高,併發侷限於應用中。

1.2 同步非阻塞I/O(NIO)

Java NIO(New IO)是從Java 1.4版本開始引入的 一個新的IO API,可以替代標準的Java IO API。 NIO與原來的IO有同樣的作用和目的,但是使用 的方式完全不同,NIO支援面向緩衝區的、基於 通道的IO操作。NIO將以更加高效的方式進行文 件的讀寫操作。

1.3 非同步非阻塞I/O(AIO)

非同步非阻塞I/O,伺服器實現模式為一個有效請求一個執行緒,客戶端的IO請求都是由作業系統先完成了再通知伺服器用其啟動執行緒進行處理。AIO方式適用於連線數目多且連線比較長(重操作)的架構,比如相簿伺服器,充分呼叫OS參與併發操作,程式設計比較複雜,jdk1.7開始支援。

1.4 同步與非同步的區別

同步:一個人只能先上完小學才能上初中,上完初中才能上高中,最後才可以大學,一步一步來,這是同步。

非同步:一個人可以一邊聽歌,也可以一邊玩遊戲,兩種動作可以同時進行

1.5 NIO與IO的區別

2、NIO的核心

client(客戶端)和server(服務端),把資料client傳送到server,或者server傳送到client,就相當於怎麼上海火車站的人群運輸到北京火車站,或者北京車站運輸到上海火車站。

channel相當於:北京上海之間的鐵軌

buffer相當於:火車(可以有多個型號的火車)

2.1 Buffer(緩衝區)

在Java NIO中負責資料的存取,緩衝區就是陣列,用於儲存不同資料型別的資料,根據資料型別不同,提供了響應型別的緩衝區:ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer、DoubleBuffer,通過 allocate() 獲取緩衝區。

2.2 Channel(通道)

Channel類似於傳送的流,只不過Channel本身不能直接訪問資料,Channel只能與Buffer進行互動

簡而言之,Channel 負責傳輸, Buffer 負責儲存

接下來的幾片部落格,將詳細分別講述Buffer、Channel的用法。