java常见的开发模型_java编程开发常见的五种IO模型

IO操作是我们在学习java编程开发语言的时候需要重点掌握的一个编程技术,而今天我们就通过案例分析来了解一下,java编程开发常见的五种IO模型。

5a20658b98fbaa73efb6842f08766732.png

1、BIO

BIO是的一种IO方式,也是简单粗暴的方式,在发起IO操作之后,当前调用线程就会处在阻塞状态,直到数据传输完成。

2、NIO

NIO是在BIO基础之上的一个改进,NIO在数据还未准备好的情况下,不会阻塞进程,而是通过轮询的方式,不断的去查询数据时候准备好,当数据可以被读取时,当前线程就会处在阻塞状态,直到数据读取完成。

所以NIO中的非阻塞指的是在等待数据的阶段,实际进行数据传输时,还是阻塞的,这点需要注意。

3、IO多路复用

IO多路复用是对NIO的一个改进,在NIO中,需要不断轮询查看数据是否准备好,IO多路复用的改进是不再主动去查询数据状态是否准备完成,而是等数据准备好的通知,当数据准备完成之后,才会开始传输数据。

与NIO一样,在数据的传输阶段,当前线程依然是阻塞的。

在Linux系统中,IO多路复用的方式有多种:

select

poll

epoll

4、信号驱动IO

信号驱动IO通过sigaction系统调用,向内核发送一个信号,当内核中数据准备好之后,当前线程也会接收到一个信号,在这个过程中,当前线程也是非阻塞的。在接收到信号之后,就可以开始传输数据。

5、AIO

上面的这些IO模型虽然有些号称是不阻塞的,那是指在等待数据就绪的过程中是不阻塞的,但是在接收数据的时候,依然还是阻塞的。

AIO是这些IO模型中真正实现完全不阻塞,AIO在被调用之后直接返回,连接收数据的阶段也是非阻塞的,等到数据接收完成之后,内核才会返回一个通知,也就是说当用户进程接收到通知时,数据已经接收完成。

在Linux中提供了AIO的实现,但是实际上使用的并不多,更多还是使用独立的异步IO库,比如libevent、libev、libuv。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值