5种IO模型

一、五种I/O模型:

阻塞I/O,非阻塞I/O,I/O复用模型,信号驱动I/O,异步I/O
前四种属于同步iO,最后一种属于异步IO。因为前四种真正的I/O操作将阻塞进程。异步I/O不导致请求被进程阻塞。由内核完成I/O操作。

1、阻塞IO

2、非阻塞IO

非阻塞IO,recv返回错误-1(EWOUDBLOCK) 很少用,数据未到的这段时间,数据要一直循环接收(忙等待)

3、IO复用模型

管理多个文件描述符,一旦其中一个描述符或多个有数据到来,select就返回。这时再调用recv就不会再阻塞了。

4、信号驱动IO(拉)

用户空间程序可以安装信号处理函数,安装之后,程序处理其他任务。一旦有数据到来,用信号来通知信号处理程序,信号处理程序来读取数据。

5、异步IO(推)

异步IO与信号驱动IO的区别在于,异步IO中内核将内核缓冲区数据写入到用户缓冲区,aio_read会递交一个应用层buf给内核(推)之后才发信号给进程来处理数据;而信号驱动IO模型中,内核有数据到来时发信号通知进程。

由进程的信号处理函数recv来从内核读取数据(拉)。

原文地址:https://www.cnblogs.com/wsw-seu/p/10950982.html