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】:

我不认为 N​​IO.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)的主要内容,如果未能解决你的问题,请参考以下文章

NIO:Selector选择器

Java中NIO及基础实现

Netty——NIO(Selector)

Netty——NIO(Selector)

Java NIO Selector 的使用

网络I/o编程模型6 Nio之Selector以及NIO客户服务通讯