NIO编程之java原生和Netty两种实现方式的比较

Java原生NIO编程现状

(1) NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。

(2)需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程。这是因为NIO编程涉及到Reactor模式,你必须对多线程和网路编程非常熟悉,才能编写出高质量的NIO程序。

(3)可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐的工作量和难度都非常大。

(4)JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK 1.6 版本的updatel8修复了该问题,但是直到JDK 1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有得到根本性解决。

Netty进行NIO编程现状

Netty是业界最流行的NIO框架之一,它的健壮性、 功能、性能、可定制性和可扩展性在同类框架中都是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架Avro就使用了Netty 作为底层通信框架,其他还有业界主流的RPC框架,也使用Netty来构建高性能的异步通信能力。

通过对Netty的分析,我们将它的优点总结如下。

  1. API使用简单,开发门槛低

  2. 功能强大, 预置了多种编解码功能,支持多种主流协议

  3. 定制能力强,可以通过ChannelHandler对通信框架进行灵活地扩展

  4. 性能高, 通过与其他业界主流的NIO框架对比,Netty 的综合性能最优

  5. 成熟、稳定,Netty 修复了已经发现的所有JDK NIO BUG,业务开发人员不需要再为NIO的BUG而烦恼

  6. 社区活跃,版本迭代周期短,发现的BUG可以被及时修复,同时,更多的新功能会加入

  7. 经历了大规模的商业应用考验,质量得到验证。Netty 在互联网、大数据、网络游戏、企业应用、电信软件等众多行业已经得到了成功商用,证明它已经完全能够满足不同行业的商业应用了。

猜你喜欢

转载自blog.csdn.net/cyb_123/article/details/107773643