Java 设计队列的线程消费者时的性能问题

Java 设计队列的线程消费者时的性能问题,java,connection,queue,rabbitmq,Java,Connection,Queue,Rabbitmq,我对编程非常陌生,而且我的软件存在性能问题。基本上,我获取一些数据并在其上运行100个循环(I=0;I如果不是IO wait,那么我怀疑这是由于这些方法内部发生了一些锁定 在我看来,你的线程花费了大量的时间等待它们返回。与直觉相反,你很可能能够通过减少线程数量来提高性能,因为它们会花更少的时间互相绊倒,更多的时间积极地做一些事情 尝试一下,看看它对配置文件有什么影响。在运行过程中网络负载如何?如果连接到服务器,网络通道饱和的时间可能比最大化CPU的时间要早得多。@dasblinkenlight对

我对编程非常陌生,而且我的软件存在性能问题。基本上,我获取一些数据并在其上运行100个循环(
I=0;I如果不是IO wait,那么我怀疑这是由于这些方法内部发生了一些锁定

在我看来,你的线程花费了大量的时间等待它们返回。与直觉相反,你很可能能够通过减少线程数量来提高性能,因为它们会花更少的时间互相绊倒,更多的时间积极地做一些事情


尝试一下,看看它对配置文件有什么影响。

在运行过程中网络负载如何?如果连接到服务器,网络通道饱和的时间可能比最大化CPU的时间要早得多。@dasblinkenlight对于我的配置文件测试,所有流量都是本地的(127.0.0.1)。服务器是否从硬盘抓取数据以便为您的应用程序提供数据,或是写入日志?(硬盘吞吐量对于cpu来说太低)。这与“dasblinkenlight”描述的情况类似。(性能可以说是i/o受限)@MartinK问得好,我认为rabbitmq的工作方式是尽可能多地保留内存,如果队列太大,它会将其写入磁盘。我有足够的内存,所以我怀疑rabbitmq是否经常接触HD,我的消费程序(我描述的程序)根本不执行任何磁盘I/O。在我添加队列之前,它使用了100%的cpu。