IO基本类型与基础概念

来源:互联网 发布:三国群英传ol 知乎 编辑:程序博客网 时间:2024/05/21 15:06
I/O 的分类:
1,阻塞I/O
解释:
相当于到一个饭店点菜,服务员拿着菜单到厨房交给厨师,然后就在出菜口等着,直到厨师做完后交给服务员;其中服务员在出菜口等待的过程就叫阻塞IO;
运行原理:
应用程序调用一个IO函数,导致应用程序阻塞,(例如浏览器请求时上面一直转圈)等待数据准备好,如果数据没有准备好,就一直等待,直至准备好,从内核拷贝到用户空间,IO函数返回成功指示
2,非阻塞I/O
解释:
相当于服务员把菜单交给厨师后就去干别的了,一定时间内就去查看是否准备好了,如果准备好了就调用系统copy资源信息到自己的缓冲区内
运行原理:
我们先把套接字设置为非阻塞告诉内核,当所有请求的IO操作无法完成时,不要将程序睡眠,而是返回一个错误,这样我们的IO操作函数将不断的测试数据是否准备好,如果没有准备好,继续测试,直至准备好位置,在这个不断测试的过程中,会大量暂用CPU的时间。一般web服务器都不适用这种IO模型
3,复用I/O
解释:
相当于多个服务员把菜单交给多个厨师后,开始等待,等待的对象是一个机器,当厨师做完后,按下机器,机器告诉服务员,好了,可以上菜了,跟阻塞IO的区别是中间多了一个机器,这个机器可以同时让多个服务员等待
运行原理:
IO复用模型会用到select、poll跟epoll函数,这两个函数也会使进程阻塞,不同的是这几个函数可以同时阻塞多个IO操作。而且同时第多个读操作,多个写操作进行检测。直到有数据可读或可写的时候才真正调用IO操作函数
4,信号I/O
解释:
相当于服务员把菜单交给厨师后,就去干别的了,厨师这边做好后叫服务员传菜
运行原理:
我们允许套接口进行信号渠道IO,并安装一个信号处理函数,进程继续运行,并不阻塞,当数据准备好了,会响应给进程一个SIGIO信息,可以在信号处理函数中调用IO操作函数处理数据
5,异步I/O
解释:
相当于服务员把菜单交给厨师后,告诉厨师,你做好了交给XXX服务员就行,就去干别的了,厨师做好后就交给XXX服务员
运行原理:
当一个异步过程调用发出后,调用者不用立即得到结果,时间处理这个调用的部分在完成后,通过状态,通知和回调来通知调用者的输入输出操作
(例如:ajax的异步,总是有一个函数接收成功或失败的数据,其他参数发送后就不管了)
其中同步IO为:
阻塞IO,非阻塞IO,复用IO
   异步IO为:
信号IO(半异步),异步IO
原创粉丝点击