IO 性能:Selector (NIO) vs AsynchronousChannel(NIO.2)
Posted
技术标签:
【中文标题】IO 性能:Selector (NIO) vs AsynchronousChannel(NIO.2)【英文标题】:IO performance: Selector (NIO) vs AsynchronousChannel(NIO.2) 【发布时间】:2015-02-16 22:15:51 【问题描述】:奇怪的是,我无法在 Google 中找到关于 NIO.2 异步 IO 性能与通过 java.nio.channels.Selector 使用 NIO 的多路复用 IO 的明确答案。
所以,我的问题是: NIO.2 AsynchronousChannel 的性能是否比 NIO Selector 更好? 当然,我对不同负载配置文件下的服务器端事物感兴趣 - 同时连接数/平均连接寿命/流量。
我能找到的唯一信息是 Windows IOCP 略好于 Windows select。
【问题讨论】:
或者你可以只使用基于线程的 I/O...它执行得很好,而且通常比异步 I/O 更好。 两者的目的不同。话虽如此,使用选择器可以有效地减少 CPU 和内存占用,因为您在单线程上。这也有助于调试。更多线程 = 更多痛苦 【参考方案1】:我不认为 NIO.2 的性能会比 NIO 更好,因为 NIO.2 仍然使用 select/poll 系统调用和线程池来模拟异步 IO。一个例子是4.0.0中的Netty removed NIO.2 support,因为作者认为NIO.2在Linux平台上并没有带来比NIO更好的性能。
【讨论】:
您提供的链接真的很有帮助。人们在那里提到,由于 Windows7 选择器的性能还不错 是的,因为Windows中的IOCP是开启异步IO操作的,虽然也是通过线程池来实现的,但是是在Kernel层面实现的,所以实现了一些性能提升。以上是关于IO 性能:Selector (NIO) vs AsynchronousChannel(NIO.2)的主要内容,如果未能解决你的问题,请参考以下文章