Java面试题—BIO,NIO,AIO

请你说一说BIO、NIO、AIO 有什么区别?

在对比这三者的区别之前,先了解一下什么是同步/异步、阻塞/非阻塞:

  • 同步:一个任务的完成之前不能做其他操作,必须等待(单行道,前车不走你没法走)。
  • 异步,一个任务的完成之前,可以进行其他操作(多行道,前车不走,你换条道走)。
  • 阻塞,是相对于CPU来说的, 挂起当前线程,不能做其他操作只能等待。
  • 非阻塞,无须挂起当前线程,也可以去执行其他操作。

BIO:同步阻塞,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。

  • 例如:当一个客户端发起请求,服务端如果没有处理完,其他客户端发送的请求只能等待。

NIO:同步非阻塞,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用,服务器用一个线程来处理多个请求,客户端发送的请求会注册到多路复用器(selector选择器)上,有I/O请求的客户端分配线程处理。

AIO:异步非阻塞,是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制,客户端发送的请求先交给操作系统处理,OS 处理后再通知线程。

上一篇:IO与NIO的区别


下一篇:最全的BAT大厂面试题整理!java数据库框架