BIO、NIO、AIO有什么区别

参考答案

一、BIO、NIO、AIO的区别

1. BIO

  • 是一个连接一个线程。
  • 发起 IO 请求,不管内核是否准备好 IO 操作,从发起请求起,线程一直阻塞,直到操作完成。
  • 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

2.NIO

  • 是一个请求一个线程。
  • 客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。
  • 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

3. AIO

  • 是一个有效请求一个线程。
  • 线程发起 IO 请求,立即返回;内存做好 IO 操作的准备之后,做 IO 操作,直到操作完成或者失败,通过调用注册的回调函数通知线程做 IO 操作完成或者失败。
  • 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的 IO 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理。

二、适用场景分析

1. BIO

适用于连接数目比较小且固定的架构,对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序直观简单易理解。

2. NIO

适用于连接数目多且连接比较短(轻操作)的架构,例如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

3. AIO

使用于连接数目多且连接比较长(重操作)的架构,例如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。

例如:

  • 同步阻塞:你到饭馆就餐,排队的人很多,你在那儿等着,什么都不能干,但是你必须等着。
  • 同步非阻塞:你到饭馆就餐,点好了就回家了。过了一会儿,你回饭馆问一声,到我了没?
  • 异步非阻塞:饭馆打电话说,我们知道你的位置,一会就给你送过来,你安心在家等就可以了,类似于外卖。

以上,是Java面试题【BIO、NIO、AIO有什么区别】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧