一、什么是I/O操作?
I = input o = output
-
从计算机的角度来讲,I/O描述了计算机与外部系统的通信过程
-
从应用程序的角度来讲,I/O实际上是发起调用指令到系统给予调用者资源的过程
二、有哪些常见的I/O模型?
Unix系统下,I/O模型分为五种:
- 同步阻塞I/O
- 同步非阻塞I/O
- I/O多路复用
- 信号驱动I/O
- 异步I/O
三、Java中常见的三种I/O模型
-
BIO(Blocking I/O)属于同步阻塞I/O模型,特点是应用程序发起read调用操作后,会阻塞,直到内核把数据拷贝到用户空间。
-
NIO(Non-blocking/New I/O)属于I/O多路复用模型,特点是应用程序首先发送一个select/epoll调用,询问内核是否将数据准备就绪,当内核准备就绪时,才会发送read调用从内核获取数据,本质上发送read调用到成功获取数据这段时间依旧是阻塞的,仍然属于同步I/O
-
AIO(Asynchronous I/O) 属于异步I/O模型,特点是应用操作后会直接返回,不会阻塞,操作系统会在处理完成时通知相应的线程进行后续的操作。