簡體   English   中英

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

[英]Java ProcessBuilder().start() vs. NodeJS require('child_process').spawn()

我們有一個用require('child_process').spawn()編寫的遺留應用程序,該應用程序正在使用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中,您需要使用新線程來運行此過程。 在文件中說

請注意,此類未同步。 如果多個線程同時訪問ProcessBuilder實例,並且至少有一個線程在結構上修改了其中一個屬性,則必須在外部對其進行同步。

DOC

如果要異步運行它,則可能需要創建新實例,而不是使用單個實例。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM