当前位置:   article > 正文

Java中的NIO

Java中的NIO

BIO的缺点

在单线程中网络传输两个地方有阻塞,需要用到多线程来支持,但是并不是所有线程都在收发数据,实际上大部分的线程都是一直在等待状态的,这样会导致大量的服务资源被浪费。

NIO的原理

设计思路:单线程处理并发
NIO通过Selector、Channel和Buffer来实现非阻塞IO操作
NIO非阻塞实现主要采用了Reactor(反应器)设计模式,这个设计模式与Observer(观察者)模式类似,只不过Obeserver设计模式只能处理一个事件源,而Reactor设计模式可以处理多个事件源。
在这里插入图片描述

由上图可知,Channel可以看做一个双向的非阻塞的通道,在通道的两边都可以进行数据的读写操作。Selector实现了可以用一个线程来管理多个通道,即可以把多个流合并为一个流,或者把一个流分为多个流。
在实现的时候,把需要处理的Channel的IO事件(如connect、read、write)注册给Selector。Selector内部的实现原理为:为所有注册的Channel进行轮询访问,一旦轮询到一个Channel 1有注册的事件发生,例如有数据来了,他就可以通过传回Selection-Key的方式来通知开发人员对Channel 1进行数据的读或写操作。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号