I/O复用模型
来源:互联网 发布:淘宝香港发货是真的吗 编辑:程序博客网 时间:2024/05/29 15:30
I/O复用模型
首先为什么需要I/O模型呢,因为进程是无法直接操作I/O设备的。其必须通过系统调用请求kernel来协助完成I/O动作。
而内核会为每个I/O设维护一个buffer。
对于输入而言,等待数据输入到buffer需要时间的,而从buffer复制数据给进程也需要时间的。
根据等待的模式不同,I/O分为五类。
一.Blocking I/O(阻塞IO)
二.Nonblocking I/O(非阻塞IO)
三.IO mutiplexing(select和poll) (IO复用)
四.single driven I/O (SIGIO)(信号驱动的IO)
五.asynchronous I/O (异步IO)
阻塞I/O
阻塞是什么意思呢。一个进程请求了数据文件,这时就向内核提交IO申请,内核去处理这个IO请求,将磁盘上的数据拷贝到buffer中。数据拷贝结束后,内核再从buffer中将数据拷出来给进程,在这个过程中,进程只能做等待不能去做其他的事。直到进程将数据返回。
非阻塞IO
非阻塞IO和阻塞IO有个区别,那就是,阻塞IO在等待数据从磁盘拷入到内核的Buffer中时,他不停的询问数据是否准备好,是否准备好,是否准备好,当数据从磁盘到内核中后就不询问了,当然,这时还需要buffer中的数据再给进程才可以。
IO复用
IO复用,这个进程请求数据后,在内核从IO上取数据时,这个过程是阻塞的,当数据准备好时,内核返回一个可读条件,进程再次发起一个系统调用,当再次发起系统调用时,又阻塞了。整个过程分为了两段,每段是独立执行的。就是数据从磁盘拷到buffer里,但是我不系统调用,我也不需要阻塞。
信号驱动IO
当进程想要数据了,发起系统调用,调用后不用阻塞,而是由内核返回一个信号处理程序,进程可以再去做其他的事情。内核处理好了,会发一个信号给进程,这时进程再系统调用,然后阻塞。由图可得这是个异步的过程。前半部分不用阻塞,而后半部分需要阻塞。
水平触发:通知不到,不停通知
边沿触发:通知一遍,就不通知了
异步IO
两个过程都不阻塞。程序可以随意运行。
最后来一个总结。
阅读全文
0 0
- I/O复用模型
- I/O复用模型
- I/O复用和I/O模型
- I/O复用模型之select
- I/O复用模型之poll
- I/O复用之epoll模型
- 服务器I/O复用模型实现
- I/O复用之select模型
- I/O复用之poll模型
- Poll() I/O复用模型
- epoll I/O复用模型
- 网络编程(基于winsocket)-- I/O操作模型介绍--I/0复用模型
- Unix Socket编程--I/O复用之select模型
- Unix Socket编程--I/O复用之select模型
- Unix Socket编程--I/O复用之select模型
- I/O复用模型之select学习
- I/O复用模型之epoll学习
- linux编程---网络编程之复用I/O模型
- 用python 实现自主查询实时天气
- HDU3555[Bomb]--数位DP
- web前端十日谈-笔记
- 二分图的判定
- Laravel-学习笔记-视图(View)
- I/O复用模型
- Java排序算法——直接插入排序
- Java——jdk1.5生产者消费者问题优化
- Linux 系统监控、诊断工具之 IO wait
- 快速排序算法
- 关于TLS经验小结(中)
- 关于RedHat本地源的配置
- 洛谷 P2341 [HAOI2006]受欢迎的牛
- 更优秀的Java代码-技巧篇1