簡體   English   中英

在Java中使用ProcessBuilder執行外部命令時如何提高性能

[英]How to increase performance when using ProcessBuilder to execute external command in Java

我使用ProcessBuilder類在Java中執行外部命令。

代碼如下所示。

ProcessBuilder pb = new ProcessBuilder(command);
pb.redirectErrorStream(true); 
Process process = pb.start(); 
...
// instance a new thread to read process output
...
process.waitFor(); 
...

但是如果很多命令都被這種方法用來執行。 由於waitFor()將花費大量時間,而命令執行時間將花費比Linux命令行更多的時間。

是否有任何方法可以提高waitfor()性能,還是在Java中執行命令的其他有效方法?

有沒有什么方法可以提高waitfor()的性能,

沒有。

或其他有效的方法來執行命令在Java?

沒有。

實際上,假設您正在讀取外部命令的所有輸出,則waitFor()調用幾乎不可能花費很多時間。

首先,我認為您正在執行所謂的“過早優化”。 也就是說,您在知道需要進行優化之前就嘗試進行優化。 除非您waitFor()代碼正常工作,測量其性能並對其進行waitFor()分析,否則您只會猜測尤其是waitFor()並通常使用ProcessBuilder是一個嚴重的瓶頸。 如果您的猜測是錯誤的,那么優化就是浪費時間。


假設使用ProcessBuilder <<瓶頸,那么在Java中您無能為力。 可能的非Java解決方案是:

  • 編寫/重寫外部應用程序,因此您無需運行多個命令。

  • 編寫腳本或批處理文件,並獲取>> that <<以運行多個命令。

您可以看一下NuProcess

但是, README指出:

就速度而言,即使運行500個並發進程,NuProcess與標准Java Process類之間也沒有顯着差異。 在某些平台上,例如MacOS X或Linux,對於大量進程,NuProcess比java.lang.Process快20%。

值得一試,看看它是否對您有幫助。

暫無
暫無

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

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