几种典型IO模型

IO ( input & output )过程:

2.1等待IO就绪---》指的是想要获取的资源已经准备好了,可以进行操作.

    读: recv/recvfrom --》想要获取的数据已经准备好了
    写:想要写入数据的空间已经准备好了,可以写入数据了send/sendto

2.2拷贝数据到缓冲区当中

阻塞IO

1.资源不可用情况下,IO请求一直被阻塞,直到资源可用

2.

3.阻塞IO的特点

     3.1阻塞IO的方式,等待的时长取决于内核;
     3.2在等待的过程当中执行流是被挂起的,对CPU的利用率是很低的

     3.3在IO就绪到拷贝之间,实时性比较高;
     3.4代码编写的流程比较简单

 

非阻塞IO

1.资源不可用的时候,IO请求不会被阻塞,而是直接返回,返回当前资源不可用;
   如果返回资源不可用,也就是意味着IO请求并没有被真正完成

2.在非阻塞的情况下,需要判断返回值,来判断I0请求是否被真正完成,需要搭配循环一直判断,直到IO请求完成

3.

4.特点:
    4.1非阻塞IO对CPU的利用率比阻塞IO高
    4.2代码复杂,流程控制复杂
    4.3循环调用,直到IO请求完成
    4.4 IO准备就绪,到拷贝数据之间不够实时

信号驱动IO

1.自定义一个IO信号的处理函数,处理当中发起IO调用;
程序收到IO信号--》内核调用IO信号的自定义处理函数--》也就是意味着在自定义处理函数当中发起了IO调用

2.


3.特点:
    3.1 IO准备就绪,到拷贝数据之间实时性加强了
    3.2代码更加复杂,流程控制更加难
    3.3不需要重复发起IO调用,但是需要在代码当中增加自定义信号的逻辑了

 

异步IO

1.原理
    1.1自定义信号的处理函数--》作用是通知数据拷贝完成的
    1.2发起一一个异步调用,并且异步调用直接返回
    1.3对于异步调用返回之后,执行流可以执行用户代码,由操作系统内核帮助我们等待IO就绪和拷贝数

    1.4当拷贝数据都完成了,内核通过信号来通知调用者

2.

3.1.异步IO模型当中,数据拷贝过程也被内核完成了

3.2.自定义信号处理函数,导致代码复杂,流程复杂

3.3.同阻塞IO,实时性没有收到多大的影响

 

总结

阻塞和非阻塞:
     只需要判断,资源不可用的时候,发起IO调用,当前IO调用是否返回
          IO调用返回:则认为是非阻塞
          IO调用没有返回:则认为是阻塞
同步和异步:
    区别于线程当中学习过的同步和互斥当中的同步,这里的同步指的是,让多个执行流合理的访问临界资源同步和异步IO当中的      同步,是指:数据拷贝过程是否由程序员完成
            是程序员完成:则为同步
            是内核完成:则为异步
   只需要判断,是否由调用者去等待调用结果
            如果是:则是同步
            如果不是:则是异步

5.多路转接IO

   下篇博客总结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值