Java NIO操作
最后更新于
对传统IO的一种补充,因为传统IO会造成线程的阻塞,因此都是结合线程池技术来保证系统的响应性。
但是出现了一个问题:严重依赖于线程这个资源,线程的创建和销毁成本很高,线程之间的切换成本也不低,另外随着线程数的增加,线程之间切换所花的时间都要大于线程本省的执行时间了。
并且随着移动端的兴起,百万级并发量都已经是比较常见的了,这时候无法通过线程这个重量级资源来完成IO操作。
NIO主要对应这一种开发模式:Reactor编程模型,大体上可以分为三个版本
主要流程也就是:建立连接——请求——业务处理——响应——断开连接
Reactor单线程模型:所有事情都一个线程来做
Reactor多线程模型:所有事情一堆线程来做
主从Reactor多线程模型:最重要的就是建立连接(保证吞吐量),因此专门一个或者多个线程完成连接建立工作,其他事情也由一个或者多个线程来完成
多路复用器来完成对事件的扫描,也就是一个死循环
主从Reactor是现在的主要流程,将连接建立这个操作单独使用一个Reactor来完成,其他操作由一个Reactor去完成,并且所有操作都是被分配到了一个或者多个线程池来进行完成