JGroups 增加基于 NIO2 的传输控制层

oschina
 oschina
发布于 2015年07月28日
收藏 31

来自 JGroups 开发者消息:JGroups 新增了全新基于 NIO2 的传输层 —— TCP_NIO2 !

新的传输层完全是非堵塞的,与 TCP 不同的是 Socket 连接、读写都不会堵塞。使用 TCP_NIO2 最大的好处就是无需针对每个连接创建一个读者线程(如果启用发送队列还需要创建写线程)。

在一个有 1000 个节点的集群中,使用 TCP 方法每个节点都要维持 999 个连接和 999 个读线程。使用 TCP_NIO2 尽管也有 999 个 TCP 连接,但只有一个选择器线程用来服务所有连接。当数据可读取,我们可以无堵塞的读取尽可能多的数据,并将读取到的数据传递个相应方法处理。

也就是说相对于 TCP 而言,TCP_NIO2 更具备可伸缩性。

性能

我们在一个 9 个节点(每个节点有8核处理器和千兆网络)的集群中运行 UPerf 和 MPerf 测试,得到如下结果:

UPerf (500'000 请求/节点, 50 invoker 线程/节点):
TCP: 62'858 reqs/sec/node, TCP_NIO2: 65'387 reqs/sec/node

MPerf (1百万消息/节点, 50 个发送线程/节点):
TCP: 69'799 msgs/sec/node, TCP_NIO2: 77'126 msgs/sec/node

可见 TCP_NIO2 在两种情况下运行都更好,我对这个结果也非常惊讶,BIO 方法更快。

我建议你在自己的环境中也进行测试看看。

相关链接:

[1] http://www.jgroups.org/manual/index.html#TCP_NIO2
[2] https://github.com/belaban/JGroups/blob/master/src/org/jgroups/protocols/TCP_NIO2.java
[3] http://www.jgroups.org/manual/index.html#PerformanceTests

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:JGroups 增加基于 NIO2 的传输控制层
加载中

最新评论(7

朱宏青
朱宏青

引用来自“朱宏青”的评论

NIO2是啥意思?为什么不是NIO?
Java NIO包只有一种吧..?

引用来自“xesam”的评论

java7 新增的nio部分的叫法
去看了一下 大致明白了
NIO 1.4版就有初版了 只是没用
1.7的时候全面更新 <-- 我也是在这个时候知道NIO并去尝试使用
TonyJian
TonyJian
然并卵,我只能用1.6
xesam
xesam

引用来自“朱宏青”的评论

NIO2是啥意思?为什么不是NIO?
Java NIO包只有一种吧..?
java7 新增的nio部分的叫法
许雷神
许雷神
厉害,学习了。。。
朱宏青
朱宏青
NIO2是啥意思?为什么不是NIO?
Java NIO包只有一种吧..?
少帮主
少帮主

引用来自“红薯”的评论

从测试结果看,感觉提升不明显啊
非常不明显,都有可能是误差行为
红薯
红薯
从测试结果看,感觉提升不明显啊
返回顶部
顶部