n个生产者向ArrayBlockingQueue中生产消息,使用put方法阻塞添加。
n个消费者以秒为频率,每秒取固定个数的消息,使用take方式阻塞取消息。目前情况是cup使用率99%+,哪位大神帮忙优化一下?

解决方案 »

  1.   

    可以先看看每秒有多少任务在处理,是不是同时消费者处理的时候,比较占用CPU
      

  2.   

    1、换成使用LinkedBlockingDeque来实现
    2、使用jmc工具监控是什么线程把cpu消耗到90%,再看这个线程的堆栈,可以找到线索
      

  3.   

    经过测试,生产速度小于消费速度,生产者永远得不到休息。但是这个模型我想不出来怎么优化,因为生产者存在无法优化的瓶颈。
    生产者速度小,这不是很好吗,消费者不需要太频繁处理,你可以直接降低生成者速度,在生产者中加一些sleepd等,这样整体处理速度会降下来,但是cpu可以降低点。