Java NIO框架Netty教程(五)-Netty中OIO模型(对比NIO)
2014-01-13 23:29
471 查看
一篇OIO和NIO对比的小研究。Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。
首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。
这就是Netty框架为我们做的贡献。
再说说,这两种情况的区别。OneCoder根据网上的资料和自己的理解,总结了一下:在Netty中,是通过worker执行任务的。也就是我们在构造bootstrap时传入的worker线程池。对于传统OIO来说,一个worker对应的channel,从读到操作到再到回写,只要是这个channel的操作都通过这个worker来完成,对于NIO来说,到MessageRecieved之后,该worker的任务就完成了。所以,从这个角度来说,非常建议你在Recieve之后,立即启动线程去执行耗时逻辑,以释放worker。
基于这个分析,你可能也发现了,上面的代码中我们用的是FiexedThreadPool。固定大小为4,从理论上来说,OIO支持的client数应该是4。而NIO应该不受此影响。测试效果如下图:
8个Client连接:
NIOServer的线程情况:
并且8个Client的请求都正常处理了。
对于OIO来说,如果你对worker池没有控制,那么支持8个client需要8个worker,8个线程,这也就是传统OIO并发数受限的原因,如图:
当OIO使用FixedThreadPool的时候:
只能处理头四个client的请求,他的被堵塞了。
但是,在Netty框架中,不论是OIO和NIO模型,读写端都不会堵塞。客户端写后立即返回,不管服务端是否接收到,接收后是否处理完成。下一章,我们将会从代码的角度来研究一下Netty中对OIO和NIO这两种模式下worker的处理方式。
首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。
ServerBootstrap bootstrap =new ServerBootstrap( newOioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newFixedThreadPool(4)));
ServerBootstrap bootstrap =new ServerBootstrap( newNioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newFixedThreadPool(4)));
这就是Netty框架为我们做的贡献。
再说说,这两种情况的区别。OneCoder根据网上的资料和自己的理解,总结了一下:在Netty中,是通过worker执行任务的。也就是我们在构造bootstrap时传入的worker线程池。对于传统OIO来说,一个worker对应的channel,从读到操作到再到回写,只要是这个channel的操作都通过这个worker来完成,对于NIO来说,到MessageRecieved之后,该worker的任务就完成了。所以,从这个角度来说,非常建议你在Recieve之后,立即启动线程去执行耗时逻辑,以释放worker。
基于这个分析,你可能也发现了,上面的代码中我们用的是FiexedThreadPool。固定大小为4,从理论上来说,OIO支持的client数应该是4。而NIO应该不受此影响。测试效果如下图:
8个Client连接:
NIOServer的线程情况:
并且8个Client的请求都正常处理了。
对于OIO来说,如果你对worker池没有控制,那么支持8个client需要8个worker,8个线程,这也就是传统OIO并发数受限的原因,如图:
当OIO使用FixedThreadPool的时候:
只能处理头四个client的请求,他的被堵塞了。
但是,在Netty框架中,不论是OIO和NIO模型,读写端都不会堵塞。客户端写后立即返回,不管服务端是否接收到,接收后是否处理完成。下一章,我们将会从代码的角度来研究一下Netty中对OIO和NIO这两种模式下worker的处理方式。
相关文章推荐
- Java NIO框架Netty教程(五)-Netty中OIO模型(对比NIO)
- Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)
- Netty 权威指南笔记(一):网络 I/O 模型和 Java NIO 入门
- java架构师高并发分布式集群视频教程 Dubbo Netty Nio Nginx jvm
- Java NIO框架Netty教程(一) – Hello Netty
- Java NIO框架Netty教程(一) – Hello Netty
- Java NIO框架之Mina、Netty、Grizzly介绍与对比
- Java NIO框架之Mina、Netty、Grizzly介绍与对比
- Java NIO框架Netty教程(一) – Hello Netty
- Netty 权威指南笔记(二):Java NIO 和 Netty 对比
- Java NIO框架Netty教程(一) – Hello Netty
- Java NIO框架Netty教程(一) – Hello Netty
- Netty学习之旅------线程模型前置篇Reactor反应堆设计模式实现(基于java.nio)
- Java NIO框架Netty教程(一) – Hello Netty
- Java NIO框架Netty教程(一) Hello Netty
- Java NIO框架Netty教程(一) – Hello Netty
- Java NIO框架Netty教程(一) – Hello Netty
- Java NIO框架Netty教程(十五)-利用Netty进行文件传输
- Java NIO框架Netty教程(一) – Hello Netty
- Netty和Jetty的Java NIO 网络框架模型分析