Java中NIO,BIO,AIO释义

一、概念

        首先看下同步与异步的区别:

同步:发送一个请求,后台立即处理,并返回处理结果。

异步:发送一个请求,不去管是否真正立即处理,可能返回的只是一个状态值,真正的处理还并未完成。完成后异步回调通知或者定时去查询结果

比如打电话,必须要对方接了之后,你才能和他进行沟通。是立即处理。但是发短信,你先发给对方,对方可能并没有立即看,你还是可以多次发短信,等对方回了之后你再知道结果。

        再看下阻塞与非阻塞的解释和区别:

阻塞:前一个没有处理完成,后一个必须等待之前的完成,才能发起。

非阻塞:前一个不管有没处理完成,后一个都可以同时处理。

比如你打算先去银行办理业务,再去饭店吃饭。阻塞的情况就是你去银行需要站在那里排队,等排到你了,办理完业务。再去吃饭,先点餐,做好了再吃。非阻塞的情景就是你去银行,不用排队,先叫好,可不用在哪等着,然后你去饭店先点餐叫号。然后再去银行办理业务,办完后到饭店也可以直接吃饭了。

        这样可以看到同步异步和阻塞非阻塞它们的侧重点是不同的。同步异步的侧重点在于后台是否立即进行了正常的处理,得到了处理结果。阻塞非阻塞的侧重点在于能否同时发起操作。

二、Java IO 

BIO:同步阻塞,jdk1.4 之前的唯一选择,一个连接一个线程。

NIO:同步非阻塞,jdk1.4 后提出的,一个请求一个线程。

AIO(NIO 2.0):异步非阻塞,jdk1.7 后提出,一个有效请求一个线程。

三、总结

上面的BIO,NIO,AIO分别适合不同场景的不同应用。

BIO:适用于连接数目比较少,且固定的架构。这种方式对服务器的资源要求比较高。

NIO:适用于连接数多且连接较短(同步)的架构。比如聊天服务器。

AIO:适用于连接数多且连接较长(异步)的架构。比如相册服务器。

猜你喜欢

转载自blog.csdn.net/u014209205/article/details/83823067