[英]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.