码迷,mamicode.com
首页 > 系统相关 > 详细

Linux下的五种IO模型

时间:2016-08-01 23:21:57      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:linux下的五种io模型

5种IO模型

Linux下五种IO模型

(1)阻塞I/O:什么都不干,导致应用程序阻塞,等待数据准备好,如果数据没有准备好,一直阻塞,等数据准备好了从内核拷贝到用户空间

(2)非阻塞I/O:把一个套接字接口设置为非阻塞,告诉内核,当所请求的IO无法完成时,不要将进程睡眠,而是返回一个错误,这样IO操作函数会不断地测试数据是否准备好,如果没有准备好 ,继续测试,直到准备好为止

(3)I/O复用(select epoll):select或epoll会使进程阻塞,但是和阻塞IO不同的是,这两个函数可以同时阻塞多个IO操作,而且同时对多个读操作,多个写操作IO函数进行检测,直到有数据可读或者可写

(4)信号驱动I/O(SIGIO):

(5)异步I/O(posix):只发起IO事件


总结:前四种都叫做同步IO

共同点:

数据一旦就绪必须由自己进行阻塞式的读写

不同点:

等待的方式不同


第五个是异步IO

不参与等待和数据搬迁,只进行发起IO动作

信号量的同步与此处同步不一样

之前的同步在多进程多线程访问临界资源的时候的顺序


同步IO与异步IO的区别:数据访问的时候是否进行阻塞

阻塞IO与非阻塞IO的区别:应用程序 调用是否立即返回

同步与异步

  (1)同步与异步关注的是消息 通信机制,所谓同步就是发出一个调用的时候,没有得到结果之前,该调用就不返回 ,但是一旦调用返回,就得到返回值了,换句话说就是由调用者主动等待这个调用的结果


例如普通B/S模式(同步):提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事


 (2)异步则是在调用发生之后用发生后,调用者不会立刻得到调用结果,实际处理这个调用的部件在 完成后,通过状态,通知和回调来处理调用者

阻塞与非阻塞(主要针对服务器端)


阻塞调用:是指调用结果返回之前,当前线程会挂起,调用线程只有得到结果之后才会返回。

非阻塞调用:是指不能立刻得到调用结果,该调用不会阻塞当前线程。



同步与异步(主要针对 客户端)

同步:客户端调用一个功能,在该功能没有结束之前处于死等的状态

异步:客户端调用一个功能,不知道 该功能的结果,该功能有结果后会 主动通知客户端




Linux下的五种IO模型

标签:linux下的五种io模型

原文地址:http://10808695.blog.51cto.com/10798695/1833067

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