博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BIO、NIO、AIO
阅读量:6679 次
发布时间:2019-06-25

本文共 1333 字,大约阅读时间需要 4 分钟。

首先理解BIO、NIO、AIO是什么东西。

Java中的BIO、NIO、AIO是Java语言对操作系统各种IO模型的封装。我们在使用这些API的时候,不用关心操作系统层面的知识,也不用根据不同的操作系统写不同的代码。在讲之前,先讲一下同步、异步、阻塞、非阻塞的概念。

同步:发起一个调用后,被调用者未处理完请求前,调用不返回

异步:发起一个调用后,立即得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,之后被调用者通过回调等机制通知调用者返回结果。

同步和异步最大的区别在于异步调用,调用者不必等待被调用者返回结果,被调用者会通过回调等机制通知调用者结果。

阻塞:

举个生活中的例子:烧水时,一直傻等着水开,是同步阻塞。去干其他事情,然后时不时看下水是不是开了,是同步非阻塞。买个水开后水壶会发出声音的水壶,水开之后,水壶发出声音,这个时候再去倒水,这是异步非阻塞。

BIO:同步阻塞IO

在JDK1.4之前,只有BIO。BIO原理是:服务器通过一个Acceptor线程监听客户端请求,并为每个客户端创建一个新的线程进行链路处理。典型的一请求一应答模式。假如客户端数量很多,频繁地创建和销毁线程会给服务器带来很大的压力。后改良为用线程池替代新增线程。

BIO通过ServerSocket和Socket完成套接字通道的实现,客户端和服务端连接需要三次握手,使用简单,但吞吐量小。

NIO:同步非阻塞IO

在JDK1.4中引入了NIO。客户端和服务器之间通过Channel通信。这些Channel都会被注册到Selector多路复用器上。Selector通过一个线程不停地轮询这些Channel,找出已经准备就绪的Channel进行IO操作。NIO提供了Channel、Selector、Buffer等抽象。

Channel:通道。和流不同,通道是双向的。NIO可以通过Channel进行数据的读、写和同时读写操作。

Selector:多路复用器。Selector会不停地轮询注册在其上的通道,如果某个通道处于就绪状态,就会被Selector轮询出来,从而进行后续的IO操作。服务器端只要提供一个线程负责Selector的轮询,就可以接入成千上万的客户端,这是NIO的巨大进步。

Buffer:缓冲区。BIO是将数据直接写入或者读取到流对象中,而NIO的数据操作都是在缓冲区中进行的。缓冲区实际上是一个数组。

NIO通过SocketChannel和ServerSocketChannel完成套接字通道的实现,客户端和服务器通过Channel连接,采用多路复用器轮询注册的Channel。提高吞吐量和可靠性。

AIO:异步非阻塞IO

AIO没有采用NIO的多路复用器,而是使用异步通道的概念,提供了异步文件通道和异步套接字通道的实现。

AIO通过AsynchronousSocketChannel和AsynchronousServerSocketChannel完成套接字通道的实现。

但是实际项目中一般不用jdk原生的api,而是用netty api。原因是

转载于:https://www.cnblogs.com/koushr/p/5873464.html

你可能感兴趣的文章
javac不是内部或外部命令
查看>>
mvc SelectList selected失效的解决方法
查看>>
JAVA 设计模式 中介者模式
查看>>
我的软件工程课目标
查看>>
var a={n:1}; var b=a; a.x=a={n:2}; console.log(a.x); console.log(b.x);
查看>>
【HDOJ】3016 Man Down
查看>>
window.open打开新页面,并将本页数据用过url传递到打开的页面;需要两个页面;...
查看>>
查看本机IP分为两种情况:
查看>>
Scala进阶之路-Scala特征类与unapply反向抽取
查看>>
洛谷P3057 [USACO12NOV]远处的牧场Distant Pastures
查看>>
hdu3415 Max Sum of Max-K-sub-sequence 单调队列
查看>>
6421B Lab2 DHCP的配置及故障排除
查看>>
[C# 基础知识梳理系列]专题一:深入解析委托——C#中为什么要引入委托
查看>>
FOSCommentBundle功能包:其它添加评论到页面的方法
查看>>
SQL Server 2012笔记分享-17:理解并设置文件表(FileTable)
查看>>
MongoDB运行状态、性能监控与分析
查看>>
Exchange 2016共享邮箱不保存已发送邮件的问题
查看>>
[C#基础知识系列]全面解析C#中静态与非静态
查看>>
SQL Server 2012笔记分享-40:自动维护索引
查看>>
C/C++各种系统开发环境搭建
查看>>