关于ArrayBlockingQueue,生产者消费者问题

失足成万古风流人物 2018-03-22 09:45:17
n个生产者向ArrayBlockingQueue中生产消息,使用put方法阻塞添加。
n个消费者以秒为频率,每秒取固定个数的消息,使用take方式阻塞取消息。

目前情况是cup使用率99%+,哪位大神帮忙优化一下?
...全文
449 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2018-03-23
  • 打赏
  • 举报
回复
引用 3 楼 u012071890 的回复:
[quote=引用 1 楼 oyljerry 的回复:] 可以先看看每秒有多少任务在处理,是不是同时消费者处理的时候,比较占用CPU
经过测试,生产速度小于消费速度,生产者永远得不到休息。但是这个模型我想不出来怎么优化,因为生产者存在无法优化的瓶颈。[/quote] 生产者速度小,这不是很好吗,消费者不需要太频繁处理,你可以直接降低生成者速度,在生产者中加一些sleepd等,这样整体处理速度会降下来,但是cpu可以降低点。
  • 打赏
  • 举报
回复
引用 2 楼 depositpei 的回复:
1、换成使用LinkedBlockingDeque来实现 2、使用jmc工具监控是什么线程把cpu消耗到90%,再看这个线程的堆栈,可以找到线索
谢谢回复。已经找到是生产者线程中存在无法优化的瓶颈。但不知道该如何优化模型
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
可以先看看每秒有多少任务在处理,是不是同时消费者处理的时候,比较占用CPU
经过测试,生产速度小于消费速度,生产者永远得不到休息。但是这个模型我想不出来怎么优化,因为生产者存在无法优化的瓶颈。
depositpei 2018-03-22
  • 打赏
  • 举报
回复
1、换成使用LinkedBlockingDeque来实现 2、使用jmc工具监控是什么线程把cpu消耗到90%,再看这个线程的堆栈,可以找到线索
oyljerry 2018-03-22
  • 打赏
  • 举报
回复
可以先看看每秒有多少任务在处理,是不是同时消费者处理的时候,比较占用CPU

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧