关于BIO,NIO,AIO,同步,异步介绍

        RPC(Remote Procedure Call)- 远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

       网络编程->RPC的“基石”。众所周知,网络编程有三种方式:BIO、NIO、AIO。

编程模型

        模型: 对事务共性的抽象

        编程模型: 对编程共性的抽象

 

BIO网络模型

        BIO 就是传统的 java.io 包,它是基于流模型实现的,交互的方式是同步、阻塞方式,也就是说在读入输入流或者输出流时,在读写动作完成之前,线程会一直阻塞在那里,它们之间的调用时可靠的线性顺序。它的有点就是代码比较简单、直观;缺

点就是 IO 的效率和扩展性很低,容易成为应用性能瓶颈

缺点

        在 Java 中,线程的实现是比较重量级的,所以线程的启动或者销毁是很消耗服务器的资源的,即使使用线程池来实现,使用上述传统的 Socket 方式,当连接数极具上升也会带来性能瓶颈,原因是线程的上线文切换开销会在高并发的时候体现的很明显,并且以上操作方式还是同步阻塞式的编程,性能问题在高并发的时候就会体现的尤为明显。

       阻塞式I/O模型

       弹性伸缩能力差

       高并发环境,容易出现问题,多线程耗资源,性能瓶颈

 

NIO网络模型

        NIO 是 Java 1.4 引入的 java.nio 包,提供了 Channel、Selector、Buffer 等新的抽象,可以构建多路复用的、同步非阻塞 IO 程序,同时提供了更接近操作系统底层高性能的数据操作方式。

       NIO 是利用了单线程轮询事件的机制,通过高效地定位就绪的 Channel,来决定做什么,仅仅 select 阶段是阻塞的,可以有效避免大量客户端连接时,频繁线程切换带来的问题,应用的扩展能力有了非常大的提高。

NIO网络模型改进

       非阻塞式I/O模型 – 服务器端提供一个单线程的selector,统一管理客户端接入的连接,并监听所有连接的事件。

       弹性伸缩能力强

       单线程节省资源: 线程的频繁创建、销毁,线程上下文切换

NIO网络编程缺陷

       麻烦: NIO类库和API繁杂

       心累: 可靠性能力补齐,工作量和难度都非常大

       有坑: Selector空轮询,导致CPU100%

 

AIO网络模型

        AIO 是 Java 1.7 之后引入的包,是 NIO 的升级版本,提供了异步非堵塞的 IO 操作方式,所以人们叫它 AIO(Asynchronous IO),与NIO不同,当进行读写操作时,只须直接调用API的read或write方法即可。这两种方法均为异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。 即可以理解为,read/write方法都是异步的,完成后会主动调用回调函数。 主要在java.nio.channels包下增加了下面四个异步通道:

AsynchronousSocketChannel, AsynchronousServerSocketChannel, AsynchronousFileChannel,
AsynchronousDatagramChannel

        其中的read/write方法,会返回一个带回调函数的对象,当执行完读取/写入操作后,直接调用回调函数。


BIO NIO AIO演变

Java核心(五)深入理解BIO、NIO、AIO

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值