设为首页 加入收藏

TOP

Unix网络编程中的的五种I/O模型
2014-11-24 11:22:46 来源: 作者: 【 】 浏览:1
Tags:Unix 网络编程 的的 I/O 模型

下面主要是把unp第六章的那一节贴出来。因为这五种模型应该是涵盖了我们网络编程中大多数的模型吧。


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模型




5. 异步I/O模型


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






在网络编程世界里,一定要知道select函数。目前比较高级的应用中epoll是最强大的。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux系统编程之struct flock 结.. 下一篇底层socket接收基于http协议数据..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·MySQL 基础入门视频 (2025-12-26 23:20:22)
·小白入门:MySQL超详 (2025-12-26 23:20:19)
·关于 MySQL 数据库学 (2025-12-26 23:20:16)
·SOLVED: Ubuntu 24.0 (2025-12-26 22:51:53)
·Linux 常用命令最全 (2025-12-26 22:51:50)