标签:
简介I/O模型
I/O多路复用就是通过一种机制,可以监视多个描述符,一旦某个描述符就位(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。
Uinx提供了五种不同类型的I/O模型:
1.阻塞式I/O模型:所有套接子都是阻塞的。(最流行的I/O模型),默认情况下,所有套接字都是阻塞的。
2.非阻塞式I/O模型:进程把一个套接字设置程非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成,不要把本进程投入睡眠,而是返回一个错误。
3.I/O复用模型:调用select和poll,阻塞在这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。
4.信号驱动式I/O模型:用信号,让内核在描述赋就绪时发送SIGIO信号通知我们。
5.异步I/O模型:函数的工作机制是,告知内核启动某个动作,并让内核在整个操作(包括将数据从内核复制到我们自己的缓冲区)完成后通知我们。这种模型与信号驱动模型的主要区别在于,信号驱动式I/O是由内核通知我们何时可以启动一个I/O操作,而异步I/O模型是由内核通知我们I/O操作何时完成。
前四种模型的主要区别在于第一个阶段,因为他们第二个阶段是一样的,在数据从内核复制到调用者的缓冲区期间,进程阻塞与recvfrom调用。相反,异步I/O在这两个阶段都要进行处理,从而不同与其他四种模型。
同步I/O和异步I/O:
同步I/O操作:导致请求进程阻塞,直到I/O操作完成,select,poll和epoll本质上都是同步I/O,因为它们都需要在读写时间就绪后,自己负责进行读写,也就是说这个过程是阻塞的。
异步I/O操作:不导致请求进程阻塞,即异步I/O无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。
同步I/O模型:阻塞式I/O模型,非阻塞式I/O模型,I/O复用模型和吸纳和信号驱动式I/O模型,因为真正的I/O操作是阻塞进程
异步I/O模型:POSIX定义的异步I/O模型相匹配。
如果要更详细的了解I/O模型,请参考<<UNIX网络编程卷一:套接字联网API>>第六章:I/O复用。
标签:
原文地址:http://my.oschina.net/u/2362892/blog/488615