gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:23:53 30 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

所以我认为在Java中你需要用一个新线程来运行这个进程。在文档中它说

Note that this class is not synchronized. If multiple threads access a ProcessBuilder instance concurrently, and at least one of the threads modifies one of the attributes structurally, it must be synchronized externally.

DOC

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

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

关于Java ProcessBuilder().start() 与 NodeJS require ('child_process' ).spawn(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54124569/

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