很高,我想知道是否有人可以就我正在思考的设计问题给我一些意见。现在我有一个java程序,当它对数据流执行大量计算时,每1秒就会使我的CPU消息达到85%。我想利用双处理器,但不想重新设计程序,使其成为多线程,因为我花了很多时间调试和测试我现在拥有的东西。如果我在两个单独的JVM实例中运行程序并拆分工作负载会在理论上提高性能怎么办? - 邓肯
答案 0 :(得分:3)
如果要分割工作负载,那么重构你需要多线程的东西可能会更好......
此外,如果您担心破坏正在运行的内容,则意味着您没有编写足够的测试来确保未来的重构能够顺利进行。因此建议编写一些捕获核心功能的测试,然后重构以分解问题空间并利用线程。
线程可以通过多种方式加速程序:
1)如果你有多个核心,可以利用线程来利用这些核心
2)如果您的程序是IO密集型的,那么将计算部分拆分为与处理IO的线程分开的线程是有意义的。您将看到这是程序运行的情况,但cpu没有挂钩,但是您的磁盘是。
3)比我更聪明的其他事情。
你也可以在线程中过度使用 - 在一个cpu上运行1000个线程可能没有意义。维护线程的开销可能会降低性能。
编辑 - 运行2个jvms的开销远高于运行几个线程的开销。
最后 - 如果问题类似于“对一堆文件中的文本执行某些操作”,那么是的,您可以将文件分成两个单独的目录,并在每个目录中指向程序的不同运行实例。但是对我来说感觉很脏......