Java NIO框架Netty教程(十四)-Netty中OIO模型(对比NIO)

释放双眼,带上耳机,听听看~!

OneCoder这个周末搬家,并且新家目前还没有网络,本周的翻译的任务尚未完成,下周一起补上,先上一篇OIO和NIO对比的小研究。

Netty中不光支持了Java中NIO模型,同时也提供了对OIO模型的支持。(New IO vs Old IO)。

首先,在Netty中,切换OIO和NIO两种模式是非常方便的,只需要初始化不同的Channel工程即可。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1ServerBootstrap bootstrap =  
2        new
3         ServerBootstrap(
4      
5
6      
7
8
9                        
10        new
11         OioServerSocketChannelFactory(
12      
13
14      
15
16
17                                
18        Executors.newCachedThreadPool(),
19      
20
21      
22
23
24                                
25        Executors.newFixedThreadPool(
26        4
27        )));
28

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
1ServerBootstrap bootstrap =  
2        new
3         ServerBootstrap(
4      
5
6      
7
8
9                        
10        new
11         NioServerSocketChannelFactory(
12      
13
14      
15
16
17                                
18        Executors.newCachedThreadPool(),
19      
20
21      
22
23
24                                
25        Executors.newFixedThreadPool(
26        4
27        )));
28

这就是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的请求,他的被堵塞了。

Hello action.: 32

Hello action.: 33

Hello action.: 34

Hello action.: 35

Hello action.: 36

Hello action.: 37

Hello action.: 38

Hello action.: 39

Hello action.: 40

但是,在Netty框架中,不论是OIO和NIO模型,读写端都不会堵塞。客户端写后立即返回,不管服务端是否接收到,接收后是否处理完成。下一章,我们将会从代码的角度来研究一下Netty中对OIO和NIO这两种模式下worker的处理方式。

如非特别注明,本站内容均为OneCoder原创,转载请务必注明作者和原始出处。

本文地址:链接地址

给TA打赏
共{{data.count}}人
人已打赏
安全网络

CDN安全市场到2022年价值76.3亿美元

2018-2-1 18:02:50

安全资讯

微软增强PWA体验:能和本地应用一样处理URL协议

2021-8-16 15:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索