java NIO的工作机制和原理

NIO 全称non-blocking IO,即同步非阻塞的IO。那么NIO与BIO有什么区别呢?BIO是同步阻塞IO,而NIO是同步非阻塞IO,也就是都是自己的工作自己来处理,但是NIO是非阻塞的,非阻塞IO就是当一件事没有完成时,也可以去做别的事情,不用非得等待这件事完成后才能去做别的事情,比如吃饭要排队,BIO就是必须排队吃完饭,再去做别的事情,NIO就是可以先去做别的事情,等会再回来吃饭。说了这么多,让我们看下基于NIO的socket处理过程图。

上面这个图简单描述了基于NIO的socket请求的处理过程,为了了解整个过程首先了解一下selector和channel是什么意思,selector就是扮演了类似管理员的一个角色,可以管理多个channel,并且selector通过selectedKeys方法可以检测到所有在管理员登记的channel是否有数据需要读取。channel就是客户端和服务端线程数据传输的信道,只要把channel注册到selector上,selector就可以对它进行管理和监测。

当客户端的请求线程和服务端建立连接后,并且channel已经注册到selector上,selector就可以监听channel上的I/O状态,管理员selector就可以通过select()方法检查channel上的I/O是否已经准备好,如果注册的信道I/O状态都没有变化,那么select方法会等待知道超时,如果有多个channel有数据,那么就会把这些数据分配到对应的Buffer中,这样的话,每个连接的数据交互都不是阻塞方式,所以一个线程可以同时处理大量的连接请求。

无论是BIO还是NIO都是同步I/O,那么有没有异步I/O呢?当然有了,异步I/O就是Asynchronous IO,简称AIO,AIO就是在NIO的基础上,引入了异步通道的概念,与NIO不同的是,NIO是一个线程采用轮询的方式不停的检查数据是否已经准备好了,准备好了就处理,AIO是向操作系统注册了IO监听,操作系统完成了IO操作主动触发响应的函数。

那么BIO、NIO、AIO的适用场景分别是什么样的呢?

BIO:适用连接数目较小且固定的架构,在jdk1.4之前的版本中使用。

NIO:适用于连接数目多但是连接比较短的架构中,在jdk1.4中开始支持。

AIO:适用于连接数目较多并且属于长连接的架构,在jdk7中开始支持。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值