多线程,计算密集型应用程序的潜在问题

时间:2011-03-20 13:39:10

标签: java multithreading cpu-usage

我一直致力于一个可以概括为“计算密集型分析工具”的项目,我选择编写代码,以便多个线程用于并行处理多个单独的计算。

由于缺乏编程多线程项目的经验而出现一系列问题后,似乎我终于设法让它像我预期的那样工作。从队列中逐个挑选计算,并同时处理。在a particular advice之后(关于适当数量的线程)我得到了响应a previous question我已经设置它以便有一个线程填充进程队列,而池中的其余线程获取进程从队列中连续出现。在我的带有8核的i7机器上,我有1个生产者+ 8个消费者= 9个线程。

现在我的问题如下:

毫无疑问,当一切按预期工作时,机器的CPU使用率会达到顶峰。我一直在通过Gnome系统监视器跟踪CPU使用情况,看起来核心在软件分析阶段的负载为90-100%。除了减慢同时运行的其他程序(例如浏览器,邮件,pdf阅读器等)之外,还有其他任何我应该注意的潜在问题吗?可能有高负载会在JVM中创建任何工件吗?

考虑到我的软件是作为科学分析工具运行而不是常规桌面应用程序,我愿意接受减慢其他程序的速度,但我想知道是否还有其他问题我应该注意。任何实际的例子或以前的经验都非常受欢迎。

提前致谢,

1 个答案:

答案 0 :(得分:3)

如果这是一项计算密集型任务,那么我发现以后台优先级运行此类任务很有用。除非任务是内存密集型并导致大量分页,否则这应该允许其他进程在很大程度上不受阻碍地运行,同时仍然允许计算过程获得实际可用CPU的大部分。如果您在Windows上运行,那么有时GUI会无响应,并且很难终止该进程或完成其他工作。 (在这方面,Unix / Linux更好,但它仍然可能令人恼火。)

你真的想确保你没有使用那么多的内存让你的机器开始疯狂地交换。