2017-03-09 103 views
1

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

整个队列开始成为服务器问题的大小(不是线程数量而是比例更大)?

回答

1

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

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

队列所需的内存通常接近ItemCount * ItemSize(加上一些开销)。 BlockingQueue实现提供了一个容量限制来防止无限增长;然而,如果能力达到了,生产者的严重节流可能通常会发生。

排队不平衡的主要因素是可以生产物品的高峰速率&消耗物品的稳定速度以及峰值的数量(物品数量)。通过计算这些数据,可以指示预计积压的时间和#个项目的积压程度。

随着现代计算机,可用内存&可实现的队列大小非常大。然而,巨额积压或大量未提交的业务数据可能是非常不可取的。

一般而言,排队的解决方案应仔细检查时:

  • 会有一个积压电势(在处理时间)以基本上超过原制造方法中,没有一个明确的无所不包过程边界,以确保积压完成。
  • 这可能会产生不希望数量的未提交业务数据。
  • 将有积压的可能性接近可用堆的大小。

所有率&大小因素取决于您的具体应用。然而,这些是一些通用原则,这应该有助于分析对排队解决方案的理解。

+0

所以基本上,重要的是要注意每个线程的处理时间,这将直接影响队列的大小。 如果那么每个线程的处理时间被认为太长,是否会将线程分解为多个任务并因此将线程分割为多个线程,这样他们的执行速度就会更快,并且队列的增长会更少? – jon

+0

不确定打破消费者任务将是一个解决方案,可能需要同一时间。如果有一个速度有限的任务在某一点上给潜在的积压,我会认为这将仍然存在,无论更长的(多个排队阶段)管道。 –