如果我有3个任务我想同时运行所有这些任务,我现在有两种方法。
由于我在linux中运行程序,我可以用shell脚本来完成。
java Task1 & java Task2 & java Task3 &
或者,我可以使用一个java程序来生成三个子线程来完成任务。
我想知道哪种方式更有效率。我怀疑shell方式会创建多个JVM实例吗?
答案 0 :(得分:4)
在Java中执行此操作会更高效,使程序成为多线程并使用三个线程。是的,shell方式将创建三个JVM实例。
但问题是,为什么要考虑另一种替代方案呢?如果这只是一项小任务,我个人只需像你一样在shell中启动三个实例。
答案 1 :(得分:2)
如果任务运行了很长时间,三个JVM的开销可以忽略不计:
很长一段时间我指的是每个任务30秒。那么短时间的任务呢?如果任务经常重复,那么时间效率才是重要的。重复运行的(重新)加载JVM的开销要小得多,但总有一些会继续存在。
结论:使用shell脚本更容易实现,编写和维护的代码更少,而且无需编写更多代码即可配置。在运行期间,在一个常见的场景中,您将发现两种方法之间没有太大差异。
答案 2 :(得分:0)
您现在的方式是启动三个单独的JVM实例,每个实例专用于一个任务。如果要在一个JVM上快速运行所有三个任务,则需要为它们创建Thread对象。
因此,我将创建一个非常简单的Java程序,它将在每个线程中启动这些任务。然后我将该程序转换为.jar文件并安排执行。
答案 3 :(得分:0)
越多JVM cpu时间越多。由于一个JVM上的三个Thread会更好。但是进行简单的基准测试是值得的。如果您这样做,请与我们分享。
答案 4 :(得分:0)
我想知道哪种方式更有效率。
如果您只是限制决定处理器效率的标准,那么Java线程方法很可能更高效。在JVM启动和内存利用方面运行额外JVM的开销将是可观的。
多线程版本可能较慢的唯一场景涉及某些资源的任务之间的竞争或JVM调优选项的选择不当;例如如果你把堆太小了。
但是,我不认为纯粹基于处理器效率的决定是明智的:
如果任务长时间运行并且您有足够的内存用于3个JVM,则性能差异(以百分比表示)可能无关紧要。 (如果整个运行需要10个小时,谁会关心你是否需要花10秒钟来启动JVM!)
您还需要考虑开发时间,测试和维护。您的思考需要考虑编写健壮的多线程应用程序的潜在复杂性。 (如果没有关于系统功能和非功能性要求的更多细节,我无法预测。)
总之,没有更详细的问题等,没有明确的答案
我怀疑shell方式会创建多个JVM实例吗?
错误。它将创建多个JVM实例。