Linux网络编程(四) I/O模型
来源:互联网 发布:otsu阈值分割算法 编辑:程序博客网 时间:2024/06/06 03:49
下面分析一下5种基本模型的区别:
·阻塞式IO;
·非阻塞使IO;
·IO复用
·信号驱动式IO
·异步IO
一个输入操作通常包含两个不同的阶段
(1)等待数据准备好
(2)从内核向进程复制数据
对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待的分组到达时,它被复制到内核的某个缓冲区中。第二步就是把数据从内核缓冲区复制到应用进程的缓冲区
1.阻塞式I/O模型
进程调用recvfrom,其系统调用直到数据报到达且被复制到应用进程的缓冲区中或者发生错误才返回
2.非阻塞式I/O模型
当进程把一个套接字设置为非阻塞时是通知内核:当所请求的I/O操作非得把进程投入睡眠时,不要将其投入睡眠,而是返回一个错误。
3.I/O复用模型
有了IO复用,我们可以使用epoll或select,阻塞在这两个系统调用之上,而不是阻塞在真正的I/O系统调用之上。
我们阻塞于select调用,等待数据报套接字变为可读
4. 信号驱动式模型
让内核在描述符就绪时发送SIGIO信号通知我们
我们既可以在信号处理函数中调用recvfrom读取数据报,也可以立即通知主循环,让它读数据
5. 异步I/O模型
工作机制:告知内核启动某个操作,并让内核在整个操作(包括数据从内核复制到我们自己的缓冲区)完成后通知我们
信号驱动模式是由内核通知我们何时启动一个IO操作,而异步I/O模型是由内核通知我们I/O操作何时完成
6.各种I/O模型的比较
·同步I/O操作:导致请求进程阻塞,直到I/O完成
·异步I/O操作:不导致请求进程阻塞
上述的前四种模型都是同步I/O模型,因为其中真正的IO操作将阻塞进程。
0 0
- Linux网络编程(四) I/O模型
- (转)Linux网络编程(5):I/O模型
- Linux网络编程(5):I/O模型
- 《网络编程》I/O 模型
- 网络编程 I/O模型
- linux编程---网络编程之复用I/O模型
- Linux网络I/O模型
- Linux网路编程系列-网络I/O模型
- Linux网络编程常见I/O模型总结
- Linux网络编程---I/O复用模型之select
- Linux网络编程---I/O复用模型之poll
- Linux网络编程---I/O复用模型之epoll
- Linux 系统应用编程——网络编程(I/O模型)
- Linux 系统应用编程——网络编程(I/O模型)
- linux网络编程之socket(八):五种I/O模型和select函数简介
- linux网络编程之socket(八):五种I/O模型和select函数简介
- linux网络编程之socket(八):五种I/O模型和select函数简介
- linux网络编程之socket(八):五种I/O模型和select函数简介
- Android中Uri的使用
- Java【代码】使用jspSmartUpload实现文件上传demo
- 一次解压多个文件:ls mrf487* | xargs -n1 unzip -P pswd
- HDU 3790 最短路径问题
- poj 3020 最小边覆盖与最大匹配 匈牙利算法
- Linux网络编程(四) I/O模型
- JAVA数组快速排序
- 设计模式:可复用面向对象软件的基础(摘要)
- leetcode 刷题之路 39 Remove Nth Node From End of List
- R学习之一
- jsonp
- 老BOJ 16 棋盘分割
- Yii
- 关于软件版本号的问题 软件版本号命名规则