Java中的BIONIO和AIO

Posted Ferron Zhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的BIONIO和AIO相关的知识,希望对你有一定的参考价值。

在讲述BIO、NIO和AIO之前,我们先来了解一下同步与异步、阻塞和非阻塞。

1、同步与异步、阻塞与非阻塞

  • 同步是指当线程发送一个请求之后,需要不断地去轮询是否已经返回结果,并且当返回结果后会继续下一步的操作。

  • 异步是指当线程发送一个请求之后,发送请求者无需等待结果返回就可继续执行其他方法,当结果返回时会通知线程。

  • 阻塞是指当线程调用结果返回之前,该线程会被挂起,不会执行其他方法,只有当得到其调用结果返回时才会继续进行

  • 非阻塞是指当线程调用返回之前,该线程也能正常运行。

  • 同步与异步关注的是请求结果返回时的通知机制。同步不会进行通知,需要线程不断地去轮询;而异步会进行通知。

  • 阻塞与非阻塞关注的是调用返回前线程的状态,阻塞是一直在等待直到调用结果返回,而非阻塞则无需等待调用结果返回。

2、BIO、NIO、AIO

  • BIO又称同步阻塞IO,它在进行读写操作时如果数据调用没有准备好,则他的进程会被阻塞,直到数据调用准备好才继续。它的读取数据和写入数据都是面向流的,只能读取当前流的数据,而不能读取前面或者后面的数据。
  • NIO又称同步非阻塞IO,它需要一个线程去轮询调用结果,在进行读写操作的时候会立刻返回结果。它的读取数据和写入数据是面向缓冲区的,读取数据是读取一整个缓冲区的数据,写入数据也是写入一整个缓冲区的数据。NIO中还有一个Selector的概念,它可以使用单线程来管理多个Channel,会选择感兴趣的Channel进行读写操作。
  • AIO是异步非阻塞模型,它与NIO的区别就是无需一个线程去轮询调用结果,而是当调用结果返回时会进行通知。

3、NIO的应用

  • Netty是目前最主流的Java开源的NIO框架。

  • NIO模型应用于各种分布式、即使通信和第三方组件中,例如Dubbo通信框架,就默认使用Netty作为基础通信组件

以上是关于Java中的BIONIO和AIO的主要内容,如果未能解决你的问题,请参考以下文章

基础 | BIONIO与AIO

Java BIONIO与AIO的介绍(学习过程)

BIONIO 和 AIO 有什么区别?

一文理解BIONIO与AIO

计网 - 网络 I/O 模型:BIONIO 和 AIO 有什么区别?

Netty:Netty为啥去掉支持AIO?