资料内容:
JDK 原生也有一套网络应用程序 API,但是存在一系列问题,主要如下:
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 版本的 update 18 修复了该问题,但是直到 JDK 1.7 版本该
问题仍旧存在,只不过该 Bug 发生概率降低了一些而已,它并没有被根本解决