首页 > 代码库 > I/O模型分类
I/O模型分类
在学习I/O模型的学习总结,如有错误,不吝指正(^.^)
I/O复用场景:
当客户处理多个描述字时;
一个客户处理多个套接口;
一个TCP服务器既要处理监听套接口,又要处理已连接套接口;
一个服务器既要处理TCP,又要处理UDP;
如果一个服务器处理多个服务或多个协议;
一个输入操作分为:
等待数据准备好(等待数据到达,然后拷贝到内核的缓冲区);
从内核到进程拷贝数据(从内核缓冲区拷贝到应用缓冲区);
阻塞I/O模型:
函数调用阻塞至数据到达且拷贝到应用缓冲区,或者出错时返回(如信号中断);
非阻塞I/O模型:
函数调用若内核无数据准备好返回EWOULDBLOCK错误,若内核数据准备好则将数据拷贝到应用缓冲区,返回成功指示;
I/O复用模型:
阻塞在select或poll模型,而非真正的I/O系统调用阻塞,等待数据报套接口可读时调用读操作函数拷贝数据到应用缓冲区。其中使用两次系统调用,好处是可以等待多个描述字准备好;
信号驱动I/O模型:
先允许套接口进行信号驱动I/O(UNIX v1 22.2),并通过系统调用sigaction安装一个信号处理程序,当数据报准备好被读时就为该进程生成一个SIGIO信号,随后可以在信号处理程序调用函数读取数据(内核缓冲区到应用缓冲区),并通知主循环程序。
异步I/O模型:
当整个过程完成后通知我们,包括将数据从内核缓冲区拷贝到应用缓冲区,与信号驱动I/O不同的是前者是在完成时通知,后者是在开始时通知。
区别:
前四种主要在第一阶段不同,在第二阶段相同(从内核缓冲区拷贝到应用缓冲区时仍然阻塞),异步I/O处理的两个阶段都不同于前四种,因此前四种都属于同步I/O。
大家发现要改正或改进的地方留个言啦
本文出自 “zmh009” 博客,请务必保留此出处http://zmh009.blog.51cto.com/11619347/1877056
I/O模型分类