说说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是非阻塞

为了大家更加方便的刷题,我们对文章进行了分类和整理,免费为大家提供刷题服务。程序员不欺骗程序员,赶紧扫码小程序刷起来!

经验分享 程序员 微信小程序 职场和发展