Java的I/O模型

14 篇文章 0 订阅
2 篇文章 0 订阅

目录

什么是I/O模型

三种I/O模型

比较NIO和BIO

BIO、NIO、AIO的适用场景 


 

什么是I/O模型

 

I/O模型指的是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。(好比马路,宽的和窄的有明显流量差别) 

Java支持3中网络I/O模型:BIO、NIO、AIO

 

 

三种I/O模型

 

Java BIO

同步并阻塞(传统阻塞型),服务器实现模型为一个请求连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。BIO可以引入线程池机制,达到并发的效果。

BIO的工作流程

1.服务器端启动一个ServerSocket

2.客户端启动Socket跟服务器进行通信,默认情况下服务器端需要对每个客户的请求建立一个线程与之通信

3.客户端发送请求后,先咨询服务器是否有线程响应,如果没有则会等待,或者被拒绝

4.如果有响应,客户端线程会等待请求结束后再继续执行

 

Java NIO 

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

NIO面向缓冲区,一般我们也把缓冲区称为块。数据读取到一个后会进入到缓冲区中,需要时可在缓冲区中前后移动进行处理。增加了处理过程的灵活性,使用它可以提供非阻塞式的高伸缩性网络

NIO的三大核心组件:Selector(选择器)、Channel(通道)、Buffer(缓冲区)

 

Java AIO

异步非阻塞,AIO引入异步通道的概念,采用Proactor模式,简化了程序编写,有效的请求才启用线程。它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数较多且连接时间较长的应用。但应用较少

 

 

比较NIO和BIO

 

1.BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O的效率高很多

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

3.BIO基于字节流和字符流传输,而NIO基于Channel和Buffer进行传输。

4.BIO单个线程只能监听单个客户端,NIO单个线程可以监听多个客户端。

 

 

BIO、NIO、AIO的适用场景 

 

BIO适用于连接数目小且固定的架构。这种方式对服务器资源要求比较高,并发局限在应用内,但程序简单易理解。

NIO适用于连接数多且连接比较短(轻操作)的架构。比如聊天服务器,弹幕系统,服务器间通讯等。编程比较复杂。JDK1.4开始支持

AIO适用于连接数目多且连接比较长(重操作)的架构。比如相册服务器,充分调用OS参与并发操作,编程复杂,JDK1.7开始支持

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值