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頁

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章