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的主要内容,如果未能解决你的问题,请参考以下文章