BlockingQueue资源消耗

BlockingQueue resource consuming

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

满队列在多大时开始成为服务器的问题(不是在线程数量方面,而是在比例方面)?

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

使用队列权衡提高了生产者速度,以减少维护队列所需的内存和开销。

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

队列不平衡的主要因素是可以生产物品的峰值速率和消耗物品的稳定速率,以及峰值的数量(物品数量)。计算这些将让您了解预计积压量有多大,包括时间和 # 项。

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

一般来说,在以下情况下应仔细检查排队解决方案:

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

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