标签:style blog http color strong os
I/O模型 2.非阻塞I/O
非阻塞I/O模型:recvfrom从应用层到内核的时候,如果该缓冲区没有数据的话,就直接返回一个ewouldblock错误,用户进程便在成功返回数据之前一直在调用recv操作询问数据可读性,轮询的操作方式。(轮询占用CPU)
以上两种模式好比:一位大伯在一个小区,知道今天有信要到门卫那边的信箱里面,但不知道什么时候。
阻塞I/O->大伯直接在门卫那边等,直到信过来;
非阻塞I/O->大伯没过一段时间去看一下有没有信过来。
3.I/O复用
I/O复用(select,poll,epoll等支持I/O多路复用):进程通过将一个或多个连接传递给select或poll系统调用,I/O复用实现了多个连接或者多种连接(TCP,UDP等)共用了同一种等待机制,select会返回某个连接的可读条件,调用recv/recvfrom把所读的数据报拷贝到应用进程的缓冲区中。(多个连接注册同一个select,nio是基于I/O复用模型实现的)
I/O复用->门卫收到整个小区的信时通知相应的人过来取信。
4.信号驱动I/O
信号驱动I/O:通过sigaction系统调用实现了SIGIO信号的捕获与处理函数,它是非阻塞的。当有数据准备就绪时,就为该进程生成一个SIGIO信号,通过信号回调通知应用程序调用recvfrom来读取数据。(捕获内核发送过来的信号)
5.异步I/O
异步I/O:告知内核启动某个操作,并让内核在整个操作完成后通知我们,包括将数据从内核拷贝到用户空间。(异步的)
信号驱动I/O->门卫通知相应人过来取信
异步I/O->门卫把信送到相应人手里
标签:style blog http color strong os
原文地址:http://my.oschina.net/OutOfMemory/blog/291729