BIO,NIO,AIO的介绍

本文深入解析了BIO(同步阻塞IO)、NIO(同步非阻塞IO)与AIO(异步非阻塞IO)的概念及工作原理,通过对比帮助读者理解三种IO模型的区别与适用场景,特别强调了它们在Java中的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先我们先来说一下同步与异步,以及阻塞与非阻塞。
同步主要指相互之间有着呼应的,做好准备的消息接收或者数据传递的发生,指的是双方都做好了准备,并且不停歇的回复对方。而异步是指接收方并没有做好接收信息的准备却收到了信息,或者不定时的发送信息出去。
阻塞与非阻塞主要是指对资源状态的一种反应,请求某一种资源时,若空缺,则一直固执等待,什么也不做,直到这种资源释放得到资源才行,其中等资源的过程叫做阻塞过程。若在等资源的时候,去做一些其他的事情,让时间充分利用以来,则是非阻塞。

有了这些概念的基础,我们就可以更好的理解BIO,NIO,AIO。
首先BIO是同步阻塞IO,B是Block的意思。NIO是同步非阻塞IO,N是new或者Non-Block的意思。AIO是异步非阻塞IO。下面用一个例子来更好的理解三者的含义。
首先去请求一个资源,若当前资源全部被占用,如果就一直等待一个资源释放,之后去利用这一资源,在等待资源过程中什么也不做,就是BIO。在等待资源过程中,去做一些其他的事情,当资源有时,就去占用。这是非阻塞过程,是NIO。
关于NIO是网络通信的一个重点,下面用一张图来解释它
在这里插入图片描述当客户端即连接数增多时,他们都交给Selector去处理,可以理解为交给一个线程去处理,也就是多路复用的意思,之后多少个客户端则是分成多少个Channel。

当资源释放时,有一种异步的机制来告诉你资源已经有了,此时去占用资源,这是AIO。

理解了上述的关键词含义后,可以更好的提升自己技术与水平,在常见的面试中也会问道上述的问题。

Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

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

Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

BIO、NIO、AIO适用场景分析:

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值