BIO、NIO和AIO的区别

IO的方式主要分为三种:BIO、NIO、AIO

在此之前,先要弄清几个概念:

。同步:在发出一个调用时,在没有得到结果前,该调用就不返回,一旦返回就有结果。

          同步IO是指用户进程请求IO操作以后通过等待或轮询的方式去查询IO操作是否就绪。

。异步:在调用发出之后就直接返回,所以没有返回结果,换句话说,当一个异步调用发生之后,调用者不会立即得到结果,而是在调用发生之后,被调用者通过状态通知来通知调用者。 

           异步IO需要操作系统更强的支持,操作系统开启独立的内核线程去处理IO操作。当read请求的数据到达时,由内核负责读取socket(网络上的两个程序通过一个双向通信连接实现数据的交换,这个连接的一段称为socket)中的数据,并写入用户指定的缓冲区中,最后内核通知用户线程。用户线程接收到内核通知后,已经完成了内核态到用户态的数据拷贝。

。阻塞:调用结果返回之前,当前线程会被阻塞,调用线程只有在得到结果之后才会返回。

。非阻塞:不能立刻得到结果之前,该调用不会阻塞当前线程。

。BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个线程不做任何事情会造成不必要的线程开销。用于连接数量小且固定的架构。在此种方式下,用户进程发起一个IO操作以后,必须等待IO操作的完成,只有当真正完成了IO操作以后,用户进程才能运行,JAVA传统的IO模型属于此种方式。

。NIO:同步非阻塞,服务器实现模式为一个请求一个线程,客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有io请求时才启动一个线程进行处理,适用于连接比较多,比较短的架构。在此种方式下,用户进程发起一个IO操作以后可返回做其他事情,但是用户进程需要时不时的询问IO操作是否就绪,这就要求用户进程不停的去询问,从而引入不必要的CPU资源浪费,目前JAVA的NIO就属于同步非阻塞IO。

nio是new io,主要用到的是块,所以nio效率比io高

。AIO:异步非阻塞,一个有效请求一个线程,适用于链接数目多且长的架构。在此种方式下,用户进程只需要发起一个IO操作然后立即返回,等IO操作真正的完成以后,用户进程会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读取或者写入操作已经由内核完成了,目前Java中还没有支持此种IO模型。

后面还有待完善..............................................

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值