IO的那点事儿

1.阻塞和非阻塞IO:应用程序在执行IO操作后,是否会阻塞自身运行

  • 阻塞IO:调用者发起一次请求后,一直到返回最终结果,当前线程会被挂起
  • 非阻塞IO:调用者发起一次请求后,不能立刻得到最终结果前,线程不会被挂起

2.同步和异步IO:程序如何获取数据即消息通讯机制

  • 同步IO:调用者主动等待最终结果
  • 异步IO:调用者发起“请求”后,被调用者直接返回(没有结果),处理完毕后被调用者会发起一个通知/调用回调函数返回最终结果

3. BIO,NIO,AIO:

3.1 区别&解释(出自作者):

  • 同步阻塞 - BIO:
    • 发送方发送请求一直等待响应
    • 接收方处理请求直到返回结果才响应发送方,期间接收方不能做其他的工作
  • 同步非阻塞 - NIO:
    • 发送方发送请求一直等待响应
    • 接收方处理请求时,不能马上立刻拿到结果,立即返回(没有结果) ,接收方可以做其他的工作
    • 发送方未收到结果,发送方仍等待;直到接收方处理完后,将状态和结果通知/回调接收方,接收方再响应发送方
  • 异步阻塞(不常见)
    • 发送方发送请求,不等待响应,可继续做其他工作
    • 接收方不能马上等待结果,当前线程挂起,一直到得到结果,期间不能做其他工作 
  • 异步非阻塞 - AIO
    • 发送方发送请求后,不等待响应,继续其他工作
    • 接收方不能马上得到结果,立即返回(没有结果),可做其他工作
    • 当操作完成后,将状态及结果通知/回调给接收方,接收方再响应发送方

3.2 极客时间 - Netty的demo(和作者理解的不一致):

  • 背景:打饭
  • 口径:
    • 饭店 - 服务器server;
    • 饭菜 - 数据data;
    • 饭好了 - 数据准备好data runable;
    • 端菜/送菜 - 数据读取data read
  • 场景:
    • 食堂打饭;排队窗口,打好才走 - BIO
    • 点单,等待被叫;等待被叫,饭好了自己端走 - NIO
    • 包厢模式;点单后直接由他人端上 - AIO

4.同步非阻塞模型 - NIO

  • 主要由 “channel - 通道”,“Buffer - 缓冲区” ,“Selector - 多路复用器”构成
  • IO/NIO主要差异性:
    • IO操作对象:字节/字符流;NIO操作对象:channel & buffer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值