在使用 NIO.2 AIO 功能进行项目时,我查看了“旧的”NIO 选择器实现,发现在 Windows 上使用了默认的选择函数,由于内部实现不良,该函数在 Windows 上根本无法扩展。大家都知道,在 Windows 上 IOCP 是唯一真正的解决方案。当然,完成时回调模型不适合 NIO 选择器模型,但这是否意味着在 Windows 上使用 NIO 基本上不是一个好主意?
例如:新的 AIO 功能包括 IOCP 实现。
在使用最新的 Netty 框架时尤其如此,其中对 AIO 的支持已被删除。那么 Netty 在 Windows 上的速度并没有想象的那么快?
NIO.2使用IOCP
下面的调用树通过在几个被调用的类名中包含“Iocp”来演示文件 I/O 的这一点,来自Java 7:测试台上的 NIO.2 文件通道 http://niklasschlimm.blogspot.de/2012/04/java-7-asynchronous-file-channels-part.html.
也可以看看sun.nio.ch.Iocp.java http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/sun/nio/ch/Iocp.java,“Windows 实现AsynchronousChannelGroup
封装一个I/O完成端口”。
NIO 不使用 IOCP,因为它只支持“非阻塞 i/o”(选择器),而不支持仅在 NIO.2 中添加的“异步 i/o”(完成处理程序)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)