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页

猜你喜欢

转载自www.cnblogs.com/boycelee/p/10014400.html