第一课 简单认识BIO/NIO/AIO

1.BIO/NIO/AIO简单介绍

IO指Java中input(输入流),output(输出流)等对外输出交换数据的形式,传输的可以是文件,网络,内存等
在这里插入图片描述

随着对流之间的传输要求越来越高,JAVA演变出了三代IO模型分别是 BIO、NIO、AIO。

(1)BIO (blocking I/O): 同步并阻塞

服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,相当于一对一模式,如果客户端一直连接着不发送请求的信息,或者它发送信息过程中有网络问题,导致服务端接收不到信息,这样就会造成服务端一直等着,即阻塞

从下面的解释可以看出BIO适合传输连接量比较小的场合,如果传输连接量变大,即会造成性能问题,也会导致大量的线程资源浪费,为了处理这些问题,就出现NIO

最后提一下,BIO在java1.4之前及其适用
在这里插入图片描述

(2)NIO (non-blocking I/O) 同步非阻塞

服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

通常来说是在BIO基础上加了一个Selector选择器,相当于加了一成过滤,Selector选择器会去判断客户请求的管道(Channel)信息是否能立即执行,而不用让服务端线程一直等待

Netty其在底层就是采用这种通信模型
在这里插入图片描述

(3)AIO(NIO.2) (Asynchronous I/O) 异步非阻塞

服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,总的来说是在NIO基层上在加了一成处理,这里我就不在这多做解释了

2.BIO与NIO模型区别

两组模型最大的别区在于阻塞与非阻塞,而所谓的阻塞是什么呢?而非阻塞又是如何解决的呢?

在阻塞模型中客户端与服务端建立连接后,就会按顺序发生三个事件

1.客户端把数据写入流中。(阻塞)

2.通过网络通道(TPC/IP)传输到服务端。(阻塞)

3.服务端读取。

这个过程中服务端的线程会一直处阻塞等待,直到数据发送过来后执行第3步。

如果在第1步客户端迟迟不写入数据,或者第2步网络传输延迟太高,都会导致服务端线程阻塞时间更长。所以更多的并发,就意味着需要更多的线程来支撑。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值