1. 程式人生 > >Linux網絡I/O模型簡介

Linux網絡I/O模型簡介

線程 開始 同步阻塞 lin 進程 bio 輪詢 檢查 開發

一、I/O基礎入門

java1.4之前的早期版本,java對I/O的支持並不完善,開發人員在開發高性能I/O程序的時候,會面臨一些巨大的挑戰和困難,主要問題如下。

1、沒用數據緩沖區,I/O性能存在問題;

2、沒有C或者C++中的Channel概念,只有輸入和輸出流;

3、同步阻塞式I/O通信(BIO),通常會導致通信線程被長時間阻塞;

4、支持字符集有限,硬件可移植性不好。

二、Linux網絡I/O模型簡介

Linux的內核講所有外部設備都看做一個文件來操作,對一個文件的讀寫操作會調用內核提供的系統命令,返回一個file descriptor(fd,文件描述符)。

而對一個socket的讀寫也會有相應的描述符,稱為socketfd(socket描述符),描述符就是一個數字,它指向內核中的一個結構體(文件路徑,數據區等一些屬性)。

根據unix網絡編程對I/O模型的分類,UNIX提供了5種I/O模型。

1、阻塞IO模型:默認情況下,所有文件操作都是阻塞的。在進程空間中調用recvfrom,其系統調用知道數據包到達且被復制到應用進程的緩沖區或者發生錯誤時才返回,

在此期間一直會等待,進程在從調用recvfrom開始到它返回的整段時間內都是被阻塞的,因此被稱為阻塞I/O模型。

2、非阻塞IO模型:recvfrom從應用層到內核的時候,如果該緩沖區沒有數據的話,就直接返回一個EWOULDBLOCK錯誤,一般都對非阻塞IO模型進行輪詢檢查這個狀態,

看內核是不是有數據到來。

Linux網絡I/O模型簡介