码迷,mamicode.com
首页 > 其他好文 > 详细

Unix网络编程中的五种I/O模型_转

时间:2017-09-02 23:20:06      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:i/o模型   非阻塞i/o   复用   设置   img   技术分享   完成   地址   inux   

转自:Unix网络编程中的的五种I/O模型

下面主要是把unp第六章介绍的五种I/O模型。

1. 阻塞I/O模型

例如UDP函数recvfrom的内核到应用层、应用层到内核的调用过程是这样的:首先把描述符、接受数据缓冲地址、大小传递给内核,但是如果此时 该与该套接口相应的缓冲区没有数据,这个时候就recvfrom就会卡(阻塞)在这里,知道数据到来的时候,再把数据拷贝到应用层,也就是传进来的地址空 间,如果没有数据到来,就会使该函数阻塞在那里,这就叫做阻塞I/O模型,如下图:

技术分享

2. 非阻塞I/O模型

如果recvfrom从应用层到内核的时候,如果该缓冲区没有数据的话,就直接给我返回,并且返回一个EWOULDBLOCK错误,一般都对非阻塞I/O模型进行轮询,就是一直在检查这个状态,看内核是不是有数据到来调用,过程如下图:

技术分享

3. I/O复用模型

设置一组套接字,如果这些套接字有一个以上出现了可读、可写、或者异常,select都会返回,这个时候,可以检查室哪个套接字状态达到了,因为 select函数的套接字集是 值=结果 的,当select返回的时候,集合中的套接字是变化的,这个返回的套接字是满足要求的,通常程序的做法是,对想要了解的套接字,进行分开处理。使用 select的好处是:能够等待多个套接字准备好。

技术分享
4. 信号驱动I/O模型

当内核为我们准备好数据的时候,就会发送 SIGIO 信号,我们 可以调用 sigaction 安装 SIGIO 信号的处理函数,这个时候就可以在 SIGIO 信号处理函数中进行 recvfrom 函数来接受数据报:

技术分享

5. 异步I/O模型

是让内核拷贝完之后通知我们。信号驱动I/O是当内核准备好数据的时候,通知我们可以调用recvfrom了,而异步I/O模型是内核通知我们I/O操作完成的时候通知我们:

技术分享

 

Unix网络编程中的五种I/O模型_转

标签:i/o模型   非阻塞i/o   复用   设置   img   技术分享   完成   地址   inux   

原文地址:http://www.cnblogs.com/embedded-linux/p/7468109.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!