1. 程式人生 > >001——Netty之IO基礎

001——Netty之IO基礎

背景

1.4版本之前JAVA對IO的支援不完善。
(1)緩衝區
(2)沒有Channel,只有輸入與輸出流
(3)同步阻塞IO(BIO)

UNIX的5種IO模型

(1)阻塞IO模型
(2)非阻塞IO模型
(3)IO複用模型
(4)訊號驅動IO模型
(5)非同步IO
I/O models

Older IO與New IO

IO

非同步與非阻塞

1、停頓等待

(1)停頓不等待
非同步與非阻塞都可以理解為停頓不等待
(2)停頓等待
同步與阻塞都可以理解為停頓等待

2、POSIX標準(可移植作業系統介面)對synchronous IO和asynchronous IO定義

(1)A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes
(2)An asynchronous I/O operation does not cause the requesting process to be blocked;

3、synchronous 與 asynchronous區別

(1)兩者區別在於synchronous在做IO操作時將程序阻塞。阻塞IO模型、非阻塞IO模型、IO複用模型、訊號驅動IO模型都是同步。例如:非阻塞IO模型在kernel(核心)準備好資料時,會呼叫recvfrom將資料從核心複製到使用者空間。訊號驅動IO模型會在資料準備好之後,通知應用程式進行IO操作。asynchronous則是在應用程序發起IO操作後,就直接返回,知道作業系統完成IO操作(其中包括將資料從核心複製到使用者空間)後,通知應用程序I/O操作完成。
總結一句話就是整個IO操作過程是不是作業系統完成的(其中包括將資料從核心複製到使用者空間)

4、如何理解Netty4.0版本是“非阻塞”的“同步IO”?同步與非阻塞是否矛盾?

(1)結合(2)(3)可知

參考

[1] https://blog.csdn.net/historyasamirror/article/details/5778378
(《Unix網路程式設計》)
[2] https://blog.csdn.net/matthew_zhang/article/details/71328697
[3] Netty權威指南 第一章 4-5頁