在学习I/O模型的学习总结,如有错误,不吝指正(^.^)


I/O复用场景:

当客户处理多个描述字时;

一个客户处理多个套接口;

一个TCP服务器既要处理监听套接口,又要处理已连接套接口;

一个服务器既要处理TCP,又要处理UDP

如果一个服务器处理多个服务或多个协议;

 

一个输入操作分为:

等待数据准备好(等待数据到达,然后拷贝到内核的缓冲区);

从内核到进程拷贝数据(从内核缓冲区拷贝到应用缓冲区);

 

阻塞I/O模型:

函数调用阻塞至数据到达且拷贝到应用缓冲区,或者出错时返回(如信号中断);

非阻塞I/O模型:

函数调用若内核无数据准备好返回EWOULDBLOCK错误,若内核数据准备好则将数据拷贝到应用缓冲区,返回成功指示;

I/O复用模型:

阻塞在selectpoll模型,而非真正的I/O系统调用阻塞,等待数据报套接口可读时调用读操作函数拷贝数据到应用缓冲区。其中使用两次系统调用,好处是可以等待多个描述字准备好;

信号驱动I/O模型:

先允许套接口进行信号驱动I/OUNIX v1 22.2),并通过系统调用sigaction安装一个信号处理程序,当数据报准备好被读时就为该进程生成一个SIGIO信号,随后可以在信号处理程序调用函数读取数据(内核缓冲区到应用缓冲区),并通知主循环程序。

异步I/O模型:

当整个过程完成后通知我们,包括将数据从内核缓冲区拷贝到应用缓冲区,与信号驱动I/O不同的是前者是在完成时通知,后者是在开始时通知。

区别:

前四种主要在第一阶段不同,在第二阶段相同(从内核缓冲区拷贝到应用缓冲区时仍然阻塞),异步I/O处理的两个阶段都不同于前四种,因此前四种都属于同步I/O


大家发现要改正或改进的地方留个言啦j_0044.gif