BIO、NIO、AIO区别与联系

IO的处理过程:

该模式下每个请求都会创建一个线程,稳定,适合连接数目小且固定架构。缺点是对性能开销大,不适合高并发场景。

为解决这一问题JAVA在1.4之后增加了NIO,该模式基于多路复用选择器监测连接状态再通知线程处理,从而达到非阻塞的目的,比传统的BIO能更好的支持并发性能。

同步阻塞IO(JAVA BIO):

同步并阻塞,服务实现模式为一个连接对应一个线程,即客户端发送一个连接,服务端要有一个线程来处理。如果连接多了,线程数量不够,就只能等待,即会发生阻塞。

同步非阻塞IO(Java NIO) :

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

异步非阻塞IO(Java AIO)

异步非阻塞,引入了异步通道,采用的是proactor模式,特点是:有效的请求才启动线程,先由操作系统完成再通知服务端。

应用场景:

BIO:适用连接数目比较小且固定的架构,对服务器要求比较高,并发局限于应用中。

NIO:适用连接数目多且连接比较短的架构,如:聊天服务器,弹幕系统等,编程比较复。

AIO:适用连接数目多且连接长的架构,如相册服务器。

BIO和NIO的区别

1.BIO主要是以I/O流的形式处理数据;NIO以I/O块(buffer)的形式处理数据,效率:块>流。

2.BIO是阻塞的,NIO是非阻塞的。

3.BIO主要是以字节流和字符流操作,NIO是基于channel(通道)、buffer(缓冲区)操作的;selector(选择器)是用来监听channel的。

4.BIO是单向的,要么是输入流要么是输出流,NIO是双向的,可以从channel往buffer读写数据,同时buffer也可以向channel读写数据。

NIO的三大核心流程图:

selector(选择器),channel(通道),buffer(缓冲区)

从图可以看出,一个线程对应selector,selector对应三个channel,channel又对应buffer(双向)。程序切换到哪个channel取决于event事件决定,selector会根据事件去切换channel。

buffer是一个内存块,底层有一个数组。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值