1. 程式人生 > >《Netty權威指南》(一)走進 Java NIO

《Netty權威指南》(一)走進 Java NIO

I/O 基礎入門

Java1.4 之前的早期版本,存在如下問題:

  • 沒有資料緩衝區,I/O效能存在問題;
  • 沒有 C 或者 C++ 中的 Channel 概念,只有輸入和輸出流;
  • 同步阻塞式 I/O 通訊(BIO),通常會導致通訊執行緒被長時間阻塞;
  • 支援的字符集有限,硬體可移植性不好。

Linux 網路 I/O 模型

根據 UNIX 網路程式設計對 I/O 模型的分類,UNIX 提供了 5 種 I/O 模型:

(1)阻塞 I/O 模型

最常用的 I/O 模型就是阻塞 I/O 模型,預設情形下,所有檔案操作都是阻塞的。我們以套接字介面為例來講解此模型:在程序空間中呼叫 recvfrom,其系統呼叫直到資料包到達且被複制到應用程序的緩衝區中或者發生錯誤時才返回,在此期間一直會等待,程序在從呼叫 recvfrom 開始到它返回的整段時間內都是被阻塞的,因此被稱為阻塞 I/O 模型。

(2)非阻塞 I/O 模型

(3)I/O 複用模型

(4)訊號驅動 I/O 模型

(5)非同步 I/O 模型