IO性能:选择器(NIO)vs异步通道(NIO.2)

4

奇怪的是,在谷歌上我找不到关于NIO.2异步IO性能与使用java.nio.channels.Selector的NIO多路复用IO的明确答案。

所以,我的问题是: NIO.2 AsynchronousChannel的性能比NIO Selector更好吗? 当然,我对不同负载配置下的服务器端感兴趣 - 同时连接数/平均连接生命周期/流量。

我唯一能找到的信息是Windows IOCP略优于Windows select。


或者你可以使用基于线程的I/O...它表现良好,往往比异步I/O更好。 - fge
两者用途不同。话虽如此,使用选择器可以有效地减少CPU和内存占用,因为您在单个线程上工作。这也有助于调试。更多线程=更多痛苦。 - Dexter
1个回答

5

我认为NIO.2的性能不会比NIO更好,因为NIO.2仍然使用select/poll系统调用和线程池来模拟异步IO。一个例子是Netty在4.0.0中删除了对NIO.2的支持,因为作者认为在Linux平台上,NIO.2并没有带来比NIO更好的性能。


提供的链接非常有用。人们在那里提到自从Windows7以来,选择器的性能并不糟糕。 - Sergey Alaev
是的,因为Windows中的IOCP使异步IO操作成为可能,虽然它也由线程池实现,但实现在内核级别,因此它实现了一些性能增强。 - Warren Zhou

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接