Java NIO是否适合低延迟或高吞吐量?

时间:2014-01-19 23:30:44

标签: java nio nonblocking throughput low-latency

我是Java NIO的新手并且已经使用了一点。我有一个通用的查询。如果您正在设计超低延迟应用程序与高吞吐量应用程序,那么使用非阻塞IO会明显受益于哪两个?

我的理解是非阻塞IO当然应该有助于高吞吐量,因为工作线程没有阻塞,因此不等待响应,并且可以自由地发送新请求,直到之前的请求被提供。一旦我们获得先前激活的请求的响应,工作线程就可以异步处理它们,从而提高吞吐量。

但是,我无法看到非阻塞IO如何直接使低延迟应用程序受益。

我猜“异步行为是避免争用的好方法。”如果是这种情况,低争用意味着低延迟。因此,NIO可能有助于降低延迟。它有意义吗?

2 个答案:

答案 0 :(得分:2)

“异步行为是避免争用的好方法。” - 仅在使用单线程时。如果有很多线程,争论是不可避免的。您必须使用多线程(使用或不使用NIO)来获得高吞吐量和/或低延迟。

NIO只能帮助保持线程数低(大约可用处理器数量),从而节省内存(每个线程占用大量内存)并允许大量同时连接,但通常比阻塞IO性能更差。

答案 1 :(得分:1)

一切都取决于......:)