簡體   English   中英

Java NIO是否適合低延遲或高吞吐量?

[英]Java NIO good for low latency or high throughput?

我是Java NIO的新手並且已經使用了一點。 我有一個通用的查詢。 如果您正在設計一個超低延遲應用程序與高吞吐量應用程序,那么這兩個應用程序中的哪一個明顯受益於使用非阻塞IO?

我的理解是非阻塞IO當然應該有助於高吞吐量,因為工作線程沒有阻塞,因此不等待響應,並且可以自由地發送新請求,直到之前的請求被提供。 一旦我們獲得先前激活的請求的響應,工作線程就可以異步處理它們,從而提高吞吐量。

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

我猜“異步行為是避免爭用的好方法。” 如果是這種情況,低爭用意味着低延遲。 因此,NIO可能有助於降低延遲。 是否有意義?

“異步行為是避免爭用的好方法。” - 僅在使用單線程時。 如果有很多線程,爭論是不可避免的。 您必須使用多線程(使用或不使用NIO)來獲得高吞吐量和/或低延遲。

NIO只能幫助保持線程數低(大約可用處理器數量),從而節省內存(每個線程消耗大量內存)並允許大量同時連接,但通常比阻塞IO性能更差。

這一切都取決於... :)

  • 如果您有多個並發線程<= CPU核心數,那么您可以使用阻塞IO / NIO獲得低延遲。 通常,在阻塞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來延遲和吞吐量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM