BlockingQueue资源消耗

时间:2017-03-09 03:38:55

标签: java multithreading threadpool

我刚刚开始了解如何使用BlockingQueue(数组或链接),我想知道排队如何影响资源(CPU,内存等)?

完整队列的大小开始是服务器的问题(不是线程数,而是比例更多)?

1 个答案:

答案 0 :(得分:1)

BlockingQueue的目的是将生产者与消费者分离。这通常在消费者速度有限时选择(通常由于CPU,I / O吞吐量或仅减少生产者延迟)。

使用队列交易提高了生产者的速度,用于内存和放大器。维护队列所需的开销。

队列所需的内存通常接近ItemCount * ItemSize(加上一些开销)。 BlockingQueue实现确实提供容量限制以防止无限增长;但是,如果达到容量,通常可能会严重限制生产者。

队列不平衡的主要因素是可以生产物品的峰值速率。物品消耗的稳定速率和峰值的体积(物品数量)。计算这些将为您提供时间和#项目中预期积压的大小。

使用现代计算机,可用内存和可实现的队列大小非常大。但是,大量积压或大量未提交的业务数据可能是非常不受欢迎的。

通常,在下列情况下应仔细检查排队解决方案:

  • 积压(处理时间)可能会大大超过原始生产流程,没有明确的包含流程边界以确保积压工作完成。
  • 可能存在不合理数量的未提交业务数据。
  • 积压可能会接近可用堆的大小。

所有费率&尺寸因素取决于您的具体应用。然而,这些是一些一般原则,应该有助于分析和了解排队解决方案。