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

对于服务器来说,满队列是什么大小的问题(不是线程数,而是比例)?

最佳答案

BlockingQueue的目的是使生产者与消费者脱钩。通常在用户速度受到限制时(通常是由于CPU,I / O吞吐量或只是为了减少生产者延迟)选择此选项。

队列的使用需要折衷提高生产者的速度,以维持队列所需的内存和开销。

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

队列不平衡的主要因素是生产物料的峰值速率和消耗物料的稳定速率以及峰值量(物料数量)。计算这些将显示时间和#个项目中期望的积压量。

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

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


积压(处理时间)可能会大大超出原始生产流程,而没有明确的流程边界来确保积压已完成。
可能会有大量未提交的业务数据。
积压可能会接近可用堆的大小。


所有的速率和大小因素都取决于您的特定应用。但是,这些是一些通用原则,应有助于对排队解决方案进行分析和理解。

关于java - BlockingQueue资源消耗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42686216/

10-09 20:19