IO模式详解

本文详细介绍了IO的两个阶段,包括阻塞与非阻塞、同步与异步的区别,并探讨了操作系统层面的五种IO类别:阻塞IO、非阻塞IO、IO多路复用(select、poll、epoll)、信号驱动IO和异步IO。同时,文章还讨论了Java层的BIO、NIO和AIO,阐述了它们的特点和应用场景。
摘要由CSDN通过智能技术生成

IO预备知识介绍

IO的两个阶段

  • 数据被拷贝到操作系统内核的缓冲区
  • 数据从操作系统内核中拷贝的用户内存

理解阻塞和非阻塞

  • 阻塞是一直block住对应的线程直至操作完成
  • 非阻塞是在数据准备时就会立即返回

理解同步和异步

  • 先来看看两者在POSIX上的概念:
    • A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;
    • An asynchronous I/O operation does not cause the requesting process to be blocked;
  • 这里需要关注的是IO operation,也就是真正的IO过程,也就是我们上述讲到的第二阶段。而我们下述前方法中的第二阶段都是阻塞的,所以都是同步的方法。只有最后一种是真正的异步IO

操作系统层面IO类别

  • 五种IO模型对比如下图所示:
  • image

阻塞IO

  • 在IO的两个阶段都是阻塞的
  • image

非阻塞IO

  • 在数据准备过程中不断地询问kernel数据是否准备完成
  • image

IO多路复用

  • 有些地方也称其为(event driven IO)
  • image
  • 多路复用转接只多了一个select函数。
  • 当用户进程调用select时,整个线程会被blocking
  • 他的基本原理就是poll()这个函数会不断的轮询所监控的所有socket是否准备完成,当某个socket有数据返回时,便会通知用户进程。
  • 在多路复用中,实际上,对于每一个socket来说,都是设置成non-blockin
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值