前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IO类型与IO模型

IO类型与IO模型

作者头像
小小科
发布2018-05-03 17:48:46
1.8K0
发布2018-05-03 17:48:46
举报
文章被收录于专栏:北京马哥教育北京马哥教育

IO类型

同步与异步(synchronous,asynchronous):关注消息通知机制
  • 同步:

进程发出系统调用之后,不会立即有返回信息,但是一旦有返回信息,则一定是最终结果.

  • 异步:

进程发出系统调用之后,会有立即返回结果,但不是最终的结果,当内核处理完成之后,内核通过通知机制通知进程,该系统调用已完成.

阻塞与非阻塞(blocking,nonblocking):关注系统调用完成时,调用者的状态
  • 阻塞:

调用者在返回结果之前,一直处于被挂起状态,直到有调用结果返回时才能继续工作.

  • 非阻塞:

调用者在调用结果返回之前,并不会被挂起,即系统调用这个动作不会阻塞调用者.

IO模型的分类

  • 阻塞I/O
  • 非阻塞I/O
  • 复用I/O
  • 事件驱动I/O
  • 异步I/O

自己画的

画完之后参考网上的

阻塞I/O模型

当用户进程发起系统调用之后,在内核还没有完成该调用任务时,进程会一直被挂起,直到内核将调用完成(内核将数据从磁盘取出到内核内存做处理,处理完之后在将数据转移至进程内存),这时进程才可以继续工作。

非阻塞I/O模型

当用户进程发起系统调用之后,该进程不会被挂起,先是处于盲等待状态,反复向内核确认该调用是否完成,当内核将数据从磁盘取出到内核内存处理完成时,该进程会被挂起,并且内核会将处理的数据转移至进程内存,这时进程来能继续工作(该进程在数据从内核内存转移至进程内存时,是被挂起)。

复用I/O模型

当用户进程发起系统调用之后,该进程可以发送多个处理请求交给内核处理,select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。

事件驱动I/O模型

当用户进程发起系统调用之后,内核会立即返回一个信号,表示该调用已经收到,接下来该进程可以去处理其他工作,当内核将数据在内核内存中准备好之后,就会通知该进程,进程这个时候就会被挂起,等待内核将数据转移至进程内存,进程才可以继续工作。

异步I/O模型

当用户进程发起系统调用之后,内核会立即返回一个信号,表示该调用已经收到,进程可以自由活动,接下来内核处理数据,当内核将数据转移至进程内存之后,会通知该进程数据已经准备好,此时进程只要去进程内存接着处理就OK。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 同步与异步(synchronous,asynchronous):关注消息通知机制
  • 阻塞与非阻塞(blocking,nonblocking):关注系统调用完成时,调用者的状态
  • IO模型的分类
    • 阻塞I/O模型
      • 非阻塞I/O模型
        • 复用I/O模型
          • 事件驱动I/O模型
            • 异步I/O模型
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档