首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java NIO适用于低延迟还是高吞吐量?

Java NIO适用于低延迟还是高吞吐量?
EN

Stack Overflow用户
提问于 2014-01-20 07:30:44
回答 2查看 1.8K关注 0票数 6

我是Java NIO的新手,也用过一点。我有一个一般性的疑问。如果您正在设计一个超低延迟应用程序与高吞吐量应用程序,那么使用非阻塞IO,这两个应用程序中的哪一个会明显受益?

我的理解是,非阻塞IO肯定有助于提高吞吐量,因为工作线程不会阻塞,因此不会等待响应,并且可以自由地触发新的请求,直到之前的请求得到服务。一旦我们得到以前触发的请求的响应,工作线程就可以异步处理它们,从而增加吞吐量。

但是,我无法看到非阻塞IO如何直接为低延迟应用程序带来好处。

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

EN

回答 2

Stack Overflow用户

发布于 2014-02-12 03:45:13

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

NIO只有助于保持较低的线程数量(大约是可用处理器的数量),从而节省内存(每个线程消耗大量内存),并允许大量的并发连接,但通常比阻塞IO的性能更差。

票数 2
EN

Stack Overflow用户

发布于 2014-03-05 07:09:21

这完全取决于..。:)

  • 如果您有多个并发线程<=多个CPU核心,那么使用阻塞IO/NIO可以获得低延迟。例如,请参阅:http://vanillajava.blogspot.ru/2011/08/comparing-java-7-async-nio-with-nio.html
  • 如果您有大量线程,则与异步NIO相比,每个连接的线程模型就不那么受欢迎了。主要是因为您支付了上下文切换的成本,这可能不是很小(调用系统调度程序的时间,更多的缓存未命中,等等)。例如,请看:http://www.cs.rochester.edu/u/cli/research/switch.pdf和更多线程=更多总价:)在这里,我们需要用于延迟和吞吐量的异步NIO。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21224073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档