目前,我正在一个无线程模型上运行,该模型无法正常工作,因为在处理我正在处理的数据之前内存不足。我已经进行了所有可以优化代码的更改,但它仍然不够快。
显然,我应该继续使用线程模型。我想知道执行以下操作的最简单,最简单的方法是:
- 主线程将一些信息传递给工作人员
- 该工作人员执行了一些我将从主要方法中重构出来的工作
- 工人将消失,新工人将在需要时实例化
我从来没有使用过 java 线程,从我读过的内容来看,它看起来很复杂,即使我正在寻找的东西看起来很简单。
目前,我正在一个无线程模型上运行,该模型无法正常工作,因为在处理我正在处理的数据之前内存不足。我已经进行了所有可以优化代码的更改,但它仍然不够快。
显然,我应该继续使用线程模型。我想知道执行以下操作的最简单,最简单的方法是:
我从来没有使用过 java 线程,从我读过的内容来看,它看起来很复杂,即使我正在寻找的东西看起来很简单。
如果您有多个具有相同优先级的独立工作单元,最好的解决方案通常是某种工作队列,其中有限数量的线程(为优化性能而选择的数量)位于一个while(true)
循环中,将工作单元从队列中取出并执行它们.
通常,最佳线程数将是处理器数 +/- 1,但在某些情况下,如果线程倾向于因磁盘 I/O 请求或诸如此类而停止,则更大的线程数将是最佳的。
但请记住,可能需要调整整个系统。例如,您可能需要更多磁盘臂,当然也可能需要更多 RAM。
我会先通读Java 并发作为复习;)
特别是,我会花一些时间来了解Executors API,因为它可以完成您所描述的大部分工作,而无需大量处理许多锁的开销;)
将内存消耗分配给多个线程不会改变整体内存消耗。从我读到的你的问题中,我想站出来告诉你:增加Java引擎的堆,这会有所帮助。看起来您必须优化 Java 启动参数而不是您的代码。如果我错了,那么您将不得不缓冲数据。到磁盘!不在同一内存模型中的线程。