重点概念
应用程序与操作系统
操作系统向应用程序提供底层硬件的抽象,应用程序通过操作系统提供的抽象进行IO等操作。为保证操作系统安全,CPU执行指令的时候分为内核态和用户态,操作系统处于内核态拥有较高权限,应用程序处于用户态具有较低权限。
执行IO操作的时候必须经过操作系统,即应用程序通过系统调用的形式向操作系统请求IO操作。这也是为什么需要有一个从内核态到用户态的一个数据拷贝过程。
IO等待与IO读写
以网络IO为例,客户端在执行read方法读取服务端数据从开始到read方法执行结束,中间可以分为两个主要耗时过程:IO等待、IO读写。
IO等待:read方法一开始,客户端应用程序向操作系统主动发起IO请求并进行IO等待,等待服务端向客户端发送数据。
IO读写:客户端操作系统收到服务端发送的数据之后,需要将内核态的数据复制到用户态,这个复制过程就是IO读写。
需要说明的是,数据必须进入用户态之后应用程序才可以对数据进行进一步处理。
阻塞非阻塞
阻塞:应用程序在向操作系统请求IO的时候阻塞等待,直到数据准备完毕。
非阻塞:应用程序请求IO的时候如果数据未准备好、数据未到达,则直接返回无数据标志,而不是阻塞等待,应用程序立得到反馈。
同步和异步
同步:应用程序向操作系统请求IO之后,或是阻塞等待,或是轮询等待,或是通过多路复用器等待,IO等待结束之后主动发起IO读写