繁体   English   中英

随着时间的流逝,FixedThreadPool中的执行速度变慢

[英]Execution in FixedThreadPool gets slower as time goes by

我有大约100000个任务需要完成,我知道它们是CPU密集型的,但是只需要很短的执行时间(当CPU足够快时)。

我使用ExecutorService executor = Executors.newFixedThreadPool(8);

我选择8是因为我的CPU有8个内核。

然后,要处理我的任务,请遍历所有这些任务:

for(Task task : tasks) {
     executor.submit(new Runnable() {
     // 1. Text analyzing
     // 2. Add result to a LinkedBlockingQueue
     }
}

我观察到的是,对于前几千个任务,这确实非常快。 但是然后说,在处理完1万个任务之后,速度变得越来越慢...

我试图了解但未能弄清楚为什么它会逐渐变慢。 由于完成任务后,资源也将被释放。 因此,我希望处理速度应该稳定。

然后我发现问题可能出在我用来存储任务结果的LinkedBlockingQueue上。 但是似乎LinkedBlockingQueue为插入提供了良好的性能。

有人可以给我一些提示或建议吗,在这种情况下我可能会做错什么?

谢谢。

该问题属于LinkedBlockingQueue的性能下降。 在我的情况下,生产者在将数据添加到队列中时效率更高,而消费者则太慢而无法处理。

LinkedBlockingQueue的Java性能问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM