NIO vs Netty

NIO vs Netty

跨平台和兼容性

NIO依赖操作系统平台底层IO系统,Linux平台上开发的功能可能在Windows平台上并不奏效。除非将这些功能在所有的平台上进行测试,这无疑是很大的工作量。

NIO.2只在JDK7开始支持,在JDK6上并不能使用。JDK中并没有提供在NIO.2-简介中提到的对AsynchronousDatagramChannel(UDP)的支持,这样我们就只能局限在TCP上。

是否选择扩展 ByteBuffer

我们并不能从ByteBuffer获取一个ByteBuffer数组的扩展,因为它的构造器并不对外开放。而在实际应用中一个ByteBuffer数组能够很大程度上减少内存拷贝带来的开销。

分散和聚集可能引发内存泄漏

在JDK6、JDK7中会印发 OutOfMemoryError。

epoll bug

在类Linux系统上,选择器使用了 epoll - IO事件通知功能.这是一个高性能的技术,在网络栈的异步工作的系统上.不幸地是,即使今天,"著名的" epoll-bug 可能导致在选择器中"无效的"状态,导致了100%CPU使用和自旋.修复的唯一方式就是回收老的selector,然后将之前注册的 Channel 实例传给新创建的 Selector.

Selector.select() 会停止阻塞,直接返回,但是并没有选择人和的SelectorKey实例。这样导致会有一个死循环吃掉你的CPU。


好吧,Netty都避免了上面的问题 大写的NB

你可能感兴趣的:(NIO vs Netty)