【问题标题】:Java ProcessBuilder().start() vs. NodeJS require('child_process').spawn()Java ProcessBuilder().start() 与 NodeJS require('child_process').spawn()
【发布时间】:2019-06-05 01:55:10
【问题描述】:

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

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

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

【问题讨论】:

  • 没有额外的分析是不可能回答的。

标签: java node.js processbuilder spawn


【解决方案1】:

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

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

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

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

DOC

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

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

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 2023-03-19
    • 2016-08-11
    • 2015-04-18
    • 2014-02-03
    • 2021-10-20
    相关资源
    最近更新 更多