Java NIO操作

对传统IO的一种补充,因为传统IO会造成线程的阻塞,因此都是结合线程池技术来保证系统的响应性。

但是出现了一个问题:严重依赖于线程这个资源,线程的创建和销毁成本很高,线程之间的切换成本也不低,另外随着线程数的增加,线程之间切换所花的时间都要大于线程本省的执行时间了。

并且随着移动端的兴起,百万级并发量都已经是比较常见的了,这时候无法通过线程这个重量级资源来完成IO操作。

NIO主要对应这一种开发模式:Reactor编程模型,大体上可以分为三个版本

主要流程也就是:建立连接——请求——业务处理——响应——断开连接

Reactor单线程模型:所有事情都一个线程来做

Reactor多线程模型:所有事情一堆线程来做

主从Reactor多线程模型:最重要的就是建立连接(保证吞吐量),因此专门一个或者多个线程完成连接建立工作,其他事情也由一个或者多个线程来完成

image-20211129210704345

多路复用器来完成对事件的扫描,也就是一个死循环

主从Reactor是现在的主要流程,将连接建立这个操作单独使用一个Reactor来完成,其他操作由一个Reactor去完成,并且所有操作都是被分配到了一个或者多个线程池来进行完成

image-20211129211620766

最后更新于

这有帮助吗?