2

问题
什么是从Java程序调用多个命令的最有效方式?Java - 优化多个命令的调用

背景
我和我的团队一直负责创建一个程序,最终调用命令的UNIX系统上的一系列的(任何地方从一百到一万,或可能更多)。这些命令不是简单的内置命令,而是已经安装在机器上的软件的一部分。由于这些命令的工作量相当大,性能是我们软件成功的关键因素,因此我一直在研究从Java调用多个命令的最有效方式。不幸的是,我还没有找到从性能角度讨论过调用多个命令的单个帖子,问题或论坛。

知识
我非常熟悉的IO在Java中,和之前与RuntimeProcessProcessBuilder班工作过。

我正在寻找
我要寻找一个高或低的水平如何最好地从内优化多个命令的调用(伪只,如果低级别的,请)说明Java程序。我无法在网络上发布我们的代码,但我不相信我们的代码是必要的,在这种情况下。为了方便起见,可以自由地假设我们所调用的命令是cmd,它的参数为-a arg0 -b arg1。知道该命令字符串在程序中较早生成并且不会根据其他调用的结果而更改可能会有所帮助。这也可能有助于了解所有呼叫的结果将是要添加到ArrayList的字符串。


非常感谢您的帮助。

+0

通过命令你的意思是单独的可执行文件? – Joe 2013-02-16 16:00:18

+0

是的,我们调用的软件是ImageMagick,但我们不能使用他们的Java库 – 2013-02-16 16:00:58

+0

请确定您需要控制:每个命令应该被控制还是一批脚本文件(bash)中的命令可能是一个解决方案? – Aubin 2013-02-16 16:03:01

回答

3

我认为这里的主要问题是并行运行尽可能多的命令,可以有效地并行运行。这通常会在性能上产生比在管理命令方面的差异更大的差异。

一般来说,我同意使用某种脚本的想法,让Java直接运行脚本的解释器。

特别是,在这种情况下,我有时会使用并行make。 makefile可以指定要运行的命令以及它们之间的任何依赖关系。例如,在需要进行数百次模拟的情况下,我制定了原始模拟报告各自依赖于模拟控制文件的规则,并且处理后的报告取决于原始报告。

并行make可以使失败后重新开始工作而不重做所有已成功完成的工作变得简单高效。它也可以管理限制并行性到合理数量的线程。

+0

你会说使用并行make将创建多个'thread'对象更好吗? – 2013-02-16 16:32:37

+0

@ZacharyKniebel如果您单独驱动每个命令并且可以具有显着的并行性,则需要大量线程来消耗每个命令的标准输出和标准错误。我不建议直接从Java驱动大量命令。无论您使用make还是其他脚本,我认为您应该将管理命令委托给某种脚本语言。 – 2013-02-16 17:07:17

+0

听起来对我很好。非常感谢你的帮助:) – 2013-02-16 17:10:00