[英]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的性能下降。 在我的情况下,生产者在将数据添加到队列中时效率更高,而消费者则太慢而无法处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.