gpt4 book ai didi

java - 针对同一机器性能问题将工作负载拆分为两个独立的 JVM

转载 作者:行者123 更新时间:2023-12-04 06:48:52 25 4
gpt4 key购买 nike

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

最佳答案

如果你打算分担工作量,你可能最好重构你必须是多线程的......

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

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

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

您也可以在线程中过度使用 - 生成 1000 个线程以在一个 cpu 上运行可能没有意义。维护线程的开销可能会降低性能。

编辑 - 运行 2 个 jvm 的开销远高于运行几个线程的开销。

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

关于java - 针对同一机器性能问题将工作负载拆分为两个独立的 JVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3411265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com