在同一台机器性能问题上将工作负载拆分为两个单独的 JVM

2024-02-18

高,我想知道是否有人可以就我正在思考的设计问题提供一些意见。现在我有一个 java 程序,当它对数据流执行大量计算时,每 1 秒我的 CPU 使用率就会飙升至 85%。我想利用双处理器,但不想重新设计程序以使其成为多线程,因为我花了很多时间调试和测试我现在拥有的程序。如果我在两个单独的 JVM 实例中运行该程序并分割工作负载,理论上会提高性能吗? - 邓肯


如果您要分配工作负载,那么最好重构必须是多线程的内容......

此外,如果您担心破坏正在运行的东西,则意味着您没有编写足够的测试来确保未来的重构顺利进行。因此,建议编写一些测试来捕获核心功能,然后进行重构以分割问题空间并利用线程。

线程可以通过多种方式加速程序:

1) 如果您有多个核心,则可以利用线程来利用这些核心。
2) 如果您的程序是 IO 密集型的,那么将计算部分拆分为与处理 IO 的线程分开的线程是有意义的。您会看到这是您的程序正在运行的情况,但 cpu 未固定,但您的磁盘已固定。
3)比我聪明的人知道的其他事情。

你也可以在线程方面做得太过分——在一个CPU上运行1000个线程可能没有意义。维护线程的开销可能会降低性能。

编辑 - 运行 2 个 jvm 的开销比运行几个线程的开销高得多。

最后 - 如果问题类似于“对一堆文件中的文本执行某些操作”,那么是的,您可以将文件分成两个单独的目录,并在每个目录中指向程序的不同运行实例。然而这对我来说感觉很肮脏......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一台机器性能问题上将工作负载拆分为两个单独的 JVM 的相关文章

随机推荐