我们有一个用NodeJS编写的旧应用程序,该应用程序正在使用require('child_process').spawn()
方法调用C ++应用程序。 C ++应用程序的工作时间约为5秒。
然后,我将NodeJS应用程序转换为Java,并使用ProcessBuilder().start()
调用相同的C ++应用程序。现在,大约需要30秒才能完成应用程序。
您知道这可能是原因还是正常行为? C ++应用程序创建了一些文件(大约20个)。可能是什么原因,我该如何改善?谢谢
答案 0 :(得分:1)
require('child_process').spawn()
不是同步调用。该方法异步生成子进程,而不会阻塞Node.js事件循环。
如果您尝试require('child_process').spawnSync()
,它将等待C ++进程。
所以我认为在Java中,您需要使用新线程来运行此过程。在文档中说
请注意,此类未同步。如果有多个线程访问 并发ProcessBuilder实例,并且至少有一个线程 从结构上修改属性之一,必须同步 外部。
如果要异步运行它,可能需要创建新实例而不是使用单个实例。
Process p = new ProcessBuilder("myCommand", "myArg").start();