1

目前,我正在一个无线程模型上运行,该模型无法正常工作,因为在处理我正在处理的数据之前内存不足。我已经进行了所有可以优化代码的更改,但它仍然不够快。

显然,我应该继续使用线程模型。我想知道执行以下操作的最简单,最简单的方法是:

  • 主线程将一些信息传递给工作人员
  • 该工作人员执行了一些我将从主要方法中重构出来的工作
  • 工人将消失,新工人将在需要时实例化

我从来没有使用过 java 线程,从我读过的内容来看,它看起来很复杂,即使我正在寻找的东西看起来很简单。

4

3 回答 3

1

如果您有多个具有相同优先级的独立工作单元,最好的解决方案通常是某种工作队列,其中有限数量的线程(为优化性能而选择的数量)位于一个while(true)循环中,将工作单元从队列中取出并执行它们.

通常,最佳线程数将是处理器数 +/- 1,但在某些情况下,如果线程倾向于因磁盘 I/O 请求或诸如此类而停止,则更大的线程数将是最佳的。

但请记住,可能需要调整整个系统。例如,您可能需要更多磁盘臂,当然也可能需要更多 RAM。

于 2012-10-31T00:15:46.890 回答
0

我会先通读Java 并发作为复习;)

特别是,我会花一些时间来了解Executors API,因为它可以完成您所描述的大部分工作,而无需大量处理许多锁的开销;)

于 2012-10-31T00:07:21.950 回答
0

将内存消耗分配给多个线程不会改变整体内存消耗。从我读到的你的问题中,我想站出来告诉你:增加Java引擎的堆,这会有所帮助。看起来您必须优化 Java 启动参数而不是您的代码。如果我错了,那么您将不得不缓冲数据。到磁盘!不在同一内存模型中的线程。

于 2012-10-31T01:24:41.503 回答