首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个请求的BlockingQueue行为

多个请求的BlockingQueue行为
EN

Stack Overflow用户
提问于 2013-07-18 07:47:57
回答 2查看 1.3K关注 0票数 0

如果我的问题很愚蠢,我很抱歉。

我正在使用ArrayBlockingQueue。

代码语言:javascript
复制
private ArrayBlockingQueue<RequestParameters> processorQueue;
private int sizeOfQueue = 3000;

在这里,我的生产者是分开的线程和消费者是分开的线程。两者都运行在单一生产者-消费者线程模式。

现在,我正在运行我的Java应用程序,它向我的Servlet提供请求。生产者将请求放入队列中。使用者为请求拍照并开始处理,这涉及到DB操作。(完成任务大约需要1秒)

在这里,我的生产者得到的请求非常快,它填充队列,等待消费者开始处理,并在队列中腾出空间。

我的问题是

  1. 什么是我应该使用的最好的BlockingQueue,这样我才能获得最佳的性能。
  2. 当队列大小满时会发生什么,我的意思是Servlet将得到请求,而不管生产者在等待队列接种疫苗。那么所有收到的请求呢?这些请求会去哪里?这些请求是否存储在JVM内存中,并在非阻塞状态下提供给Producer Thread?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-18 07:54:03

虽然正确的解决方案将取决于应用程序需求的可行性,但以下几点可能会有所帮助:

当q满而不是无限期阻塞时,使用timeout阻塞,这样servlet将在固定配置的时间内返回响应。在timeout的情况下,servlet可以抛出服务器繁忙的自定义错误消息或相关的HTTP-CODE

由于您的使用者速度慢,并且producer非常快,所以您最好考虑增加使用者线程,以便为servlet调用者提供较少的阻塞体验。

此外,接受所有请求(即存储到无限制的- Q )将不是一个很好的解决方案,因为(取决于请求大小)由于消费者q慢,一段时间内可能会消耗大量内存。

票数 2
EN

Stack Overflow用户

发布于 2013-07-18 08:47:42

什么是我应该使用的最好的BlockingQueue,这样我才能获得最佳的性能。

考虑到系统中有一个网络,我会感到惊讶,但是如果FIFO性能是您的标准,并且没有随机访问,那么您应该根据链接列表使用一个网络。

当队列大小满时会发生什么?

您指定了BlockingQueue,,因此它将被阻塞。

这些都在Javadoc里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17717620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档