image

编辑人: 长安花落尽

calendar2025-01-19

message5

visits768

说说BIO、NIO、AIO 的区别?

分析&回答

基础知识

  • Java中IO是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。其中包括:文件读写、标准设备输出等。
  • BIO、NIO、AIO之间的区别就在于这些操作是同步还是异步,阻塞还是非阻塞。

同步与异步

同步和异步指的是一个执行流程中每个方法是否必须依赖前一个方法完成后才可以继续执行。假设我们的执行流程中:依次是方法一和方法二。

同步指的是调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。即方法二一定要等到方法一执行完成后才可以执行。

异步指的是调用立刻返回,调用者不必等待方法内的代码执行结束,就可以继续后续的行为。(具体方法内的代码交由另外的线程执行完成后,可能会进行回调)。

阻塞与非阻塞

阻塞与非阻塞指的是单个线程内遇到同步等待时,是否在原地不做任何操作。

阻塞指的是遇到同步等待后,一直在原地等待同步方法处理完成。

非阻塞指的是遇到同步等待,不在原地等待,先去做其他的操作,隔断时间再来观察同步方法是否完成。

举例说明

  • A顾客去吃海底捞,就这样干坐着等(阻塞)了一小时,然后才开始吃火锅。(BIO)
  • B顾客去吃海底捞,他一看要等挺久,于是去逛商场,每次(轮询)逛一会就跑回来看有没有排到他。于是他最后既购了物,又吃上海底捞了。(NIO)
  • C顾客去吃海底捞,由于他是高级会员,所以店长说,你去商场随便玩吧,等下有位置,我立马打电话(回调)给你。于是C顾客不用干坐着等,也不用每过一会儿就跑回来看有没有等到,最后也吃上了海底捞(AIO)

反思&扩展

IO与NIO的区别IO与NIO的区别

  • IO是单向的,NIO是双向的
  • IO是面向流的,NIO是面向缓冲区(块)的
  • IO是阻塞,NIO是非阻塞

说说零拷贝?

说说 NIO 是如何实现的?


喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

创作类型:
原创

本文链接:说说BIO、NIO、AIO 的区别?

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share