五种IO模型
1、阻塞IO
1.1、概念
阻塞IO: 在内核将数据准备好之前,系统调用会一直等待所有的套接字,默认都是阻塞方式。
1.2、流程图
2、非阻塞IO
2.1、概念
非阻塞IO:如果内核还未将数据准备好,,系统调用仍然会直接返回,并且返回EWOULDBLOCK错误码。
注意:非阻塞IO往往需要程序员循环的方式反复尝试读写文件描述符, 这个过程称为轮询. 这对CPU来说是较大的浪费, 一般只有特定场景下才使用
2.2、流程图
3、信号驱动IO
3.1、概念
信号驱动IO:先设置SIGIO的回调函数,当内核将数据准备好的时候,内核使用SIGIO信号通知应用程序进行IO操作。
3.2、流程图
4、异步IO
4.1、概念
异步IO:由内核在数据拷贝完成时,通知应用程序(而信号驱动是告诉应用程序何时可以开始拷贝数据)。
4.2、流程图
5、IO多路转接
5.1、概念
IO多路转接:虽然看起来和阻塞IO类似,但实际上最核心在于IO多路转接能够同时等待多个文件描述符的就绪状态。所以这也是我们用的最多的。