- 概览
从底层到上层来看,IO主要分为两个阶段,第一个阶段为数据准备(等待)阶段,第二个阶段为数据拷贝阶段;第一阶段,从网卡上接收数据,第二个阶段将数据从kernel拷贝到用户态缓存;
- IO模型
- 阻塞模型:应用程序调用系统调用,比如recvfrom,一直等到第一阶段和第二阶段都ok了才返回;
- 非阻塞模型:应用程序调用系统调用,比如recvfrom,非阻塞的,第一阶段没准备好,返回errorno=EWOULDBLOCK;
- 信号驱动模型:应用程序调用系统调用sigaction,注册SIGIO信号,当第一阶段准备好了,会通过信号通知到应用进程,应用进程调用recvfrom进行数据拷贝;
- 多路复用(阻塞模型):是一种阻塞模型,系统调用包括select,epoll等,只是可以阻塞在多个文件描述符上,有一个可用(第一阶段准备好了),系统调用返回,应用进程调用recvfrom拷贝数据;
- 异步IO:应用进程调用系统调用aio_read,然后就返回,等到第一阶段和第二阶段都准备好了,通过异步信号通知应用进程进行数据处理;