2017-03-09 104 views
1

我剛剛開始瞭解如何使用BlockingQueue(數組或鏈接),我想知道排隊如何影響資源(CPU,內存等)?BlockingQueue資源消耗

整個隊列開始成爲服務器問題的大小(不是線程數量而是比例更大)?

回答

1

BlockingQueue的目的是將生產者與消費者分離。當消費者速度有限時(通常由於CPU,I/O吞吐量或者僅僅爲了減少生產者延遲),通常選擇這種方式。

使用隊列交易提高了生產者速度,用於維護隊列所需的內存開銷&。

隊列所需的內存通常接近ItemCount * ItemSize(加上一些開銷)。 BlockingQueue實現提供了一個容量限制來防止無限增長;然而,如果能力達到了,生產者的嚴重節流可能通常會發生。

排隊不平衡的主要因素是可以生產物品的高峯速率&消耗物品的穩定速度以及峯值的數量(物品數量)。通過計算這些數據,可以指示預計積壓的時間和#個項目的積壓程度。

隨着現代計算機,可用內存&可實現的隊列大小非常大。然而,鉅額積壓或大量未提交的業務數據可能是非常不可取的。

一般而言,排隊的解決方案應仔細檢查時:

  • 會有一個積壓電勢(在處理時間)以基本上超過原製造方法中,沒有一個明確的無所不包過程邊界,以確保積壓完成。
  • 這可能會產生不希望數量的未提交業務數據。
  • 將有積壓的可能性接近可用堆的大小。

所有率&大小因素取決於您的具體應用。然而,這些是一些通用原則,這應該有助於分析對排隊解決方案的理解。

+0

所以基本上,重要的是要注意每個線程的處理時間,這將直接影響隊列的大小。 如果那麼每個線程的處理時間被認爲太長,是否會將線程分解爲多個任務並因此將線程分割爲多個線程,這樣他們的執行速度就會更快,並且隊列的增長會更少? – jon

+0

不確定打破消費者任務將是一個解決方案,可能需要同一時間。如果有一個速度有限的任務在某一點上給潛在的積壓,我會認爲這將仍然存在,無論更長的(多個排隊階段)管道。 –