原生nio 的缺点
JDK NIO bug
使用IO复用,Linux下一般默认就是epoll,Java NIO在Linux下默认也是epoll机制,但是JDK中epoll的实现却是有漏洞的,其中最有名的java nio epoll bug就是即使是关注的select轮询事件返回数量为0,NIO照样不断的从select本应该阻塞的Selector.select()/Selector.select(timeout)中wake up出来,导致CPU 100%问题。
Netty 优势
阿里巴巴的分布式框架dubbo,就使用了netty 作为底层框架,其他rpc 框架很多也是用netty
Netty的优势:
业界流行的NIO框架之一,健壮性,功能,可定制性,可扩展性都比较好,得到了业界的认可与证明,比如在dubbo框架中的底层应用
API使用简单,定制能力强,可以灵活扩展
入门门槛低,易学,功能强大,预置了多种编解码功能,支持多种主流通信协议
性能高
成熟,稳定
原生NIO的缺陷
类库和API繁杂
入门门槛高,需要其他额外的知识做铺垫
工作量和难度大,客户端会面临断开,重连,网络闪断,失败缓存,网络拥堵等问题
JDK NIO存在缺陷,可能会导致selector空轮询,导致CPU飙升
Netty的优势
Netty的优势
拥有NIO的性能优势,但是没有了NIO的使用难度,使用简单、性能高、稳定、成熟、入门门槛低,像极了一位成熟优雅的女士。
原生NIO的缺陷
一句话,难用。
为啥难用,因为入门门槛高、前提知识多、有些东西和业务无关,但是还要自己来考虑编写,所以,Netty团队,就对这个东西进行了封装,使其比较容易使用了!
netty的优势
原生NIO的缺陷
客户端的断链 重链 网络闪断 半包读写 失败缓存 网络拥塞 异常码流
JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU 100%。官方声称在JDK1.6版本的update18修复了该问题,但是直到JDK1.7版本该问题仍旧存在,只不过该BUG发生概率降低了一些而已,它并没有被根本解决。
原生NIO的缺陷
Netty入门-Netty的优势
Netty入门-原生NIO的缺陷