在jdk1.4中提出的技术,非阻塞IO,采用的是基于事件处理方式。
传统的io技术为阻塞的,比如读一个文件,惹read方法是阻塞的,直到有数据读入。
归纳为:
1、java io为阻塞,在打开一个io通道后,read将一直等待在端口一边读取字节内容,如果没有内容进来,read相当于阻塞掉了。
2、在1的基础上改进为,开设线程,serversocker.accept()后让线程去等待,但是当并发量高的时候,相当耗费资源的。
3、java nio为非阻塞,采用的是reactor反应堆模式,或者说observer观察者模式,监察io端口,注册事件到selector,当事件满足条件后触发行为。
大致流程为:
java nio提供一个selector,这个类似一个观察者,将需要探知的socketchannel注册到selector上
接着我们做别的事情,当有事件发生时候,selector会通知我们,传回一组selectionKey,我们读取这些key就会获得到我们刚刚注册过的socketchannel,然后从这个channel读取数据、处理业务逻辑。
selector内部原理,采用轮询的方式,对所注册的channel进行遍历,判断channel所注册的事件是否发生。
代码举例为:
新闻热点
疑难解答