Java ProcessBuilder()。start()与NodeJS require('child_process')。spawn()

时间:2019-01-10 08:29:22

标签: java node.js processbuilder spawn

我们有一个用NodeJS编写的旧应用程序,该应用程序正在使用require('child_process').spawn()方法调用C ++应用程序。 C ++应用程序的工作时间约为5秒。

然后,我将NodeJS应用程序转换为Java,并使用ProcessBuilder().start()调用相同的C ++应用程序。现在,大约需要30秒才能完成应用程序。

您知道这可能是原因还是正常行为? C ++应用程序创建了一些文件(大约20个)。可能是什么原因,我该如何改善?谢谢

1 个答案:

答案 0 :(得分:1)

require('child_process').spawn()不是同步调用。该方法异步生成子进程,而不会阻塞Node.js事件循环。

如果您尝试require('child_process').spawnSync(),它将等待C ++进程。

所以我认为在Java中,您需要使用新线程来运行此过程。在文档中说

  

请注意,此类未同步。如果有多个线程访问   并发ProcessBuilder实例,并且至少有一个线程   从结构上修改属性之一,必须同步   外部。

DOC

如果要异步运行它,可能需要创建新实例而不是使用单个实例。

Process p = new ProcessBuilder("myCommand", "myArg").start();