2

問題
什麼是從Java程序調用多個命令的最有效方式?Java - 優化多個命令的調用

背景
我和我的團隊一直負責創建一個程序,最終調用命令的UNIX系統上的一系列的(任何地方從一百到一萬,或可能更多)。這些命令不是簡單的內置命令,而是已經安裝在機器上的軟件的一部分。由於這些命令的工作量相當大,性能是我們軟件成功的關鍵因素,因此我一直在研究從Java調用多個命令的最有效方式。不幸的是,我還沒有找到從性能角度討論過調用多個命令的單個帖子,問題或論壇。

知識
我非常熟悉的IO在Java中,和之前與RuntimeProcessProcessBuilder班工作過。

我正在尋找
我要尋找一個高或低的水平如何最好地從內優化多個命令的調用(僞只,如果低級別的,請)說明Java程序。我無法在網絡上發佈我們的代碼,但我不相信我們的代碼是必要的,在這種情況下。爲了方便起見,可以自由地假設我們所調用的命令是cmd,它的參數爲-a arg0 -b arg1。知道該命令字符串在程序中較早生成並且不會根據其他調用的結果而更改可能會有所幫助。這也可能有助於瞭解所有呼叫的結果將是要添加到ArrayList的字符串。


非常感謝您的幫助。

+0

通過命令你的意思是單獨的可執行文件? – Joe 2013-02-16 16:00:18

+0

是的,我們調用的軟件是ImageMagick,但我們不能使用他們的Java庫 – 2013-02-16 16:00:58

+0

請確定您需要控制:每個命令應該被控制還是一批腳本文件(bash)中的命令可能是一個解決方案? – Aubin 2013-02-16 16:03:01

回答

3

我認爲這裏的主要問題是並行運行儘可能多的命令,可以有效地並行運行。這通常會在性能上產生比在管理命令方面的差異更大的差異。

一般來說,我同意使用某種腳本的想法,讓Java直接運行腳本的解釋器。

特別是,在這種情況下,我有時會使用並行make。 makefile可以指定要運行的命令以及它們之間的任何依賴關係。例如,在需要進行數百次模擬的情況下,我制定了原始模擬報告各自依賴於模擬控制文件的規則,並且處理後的報告取決於原始報告。

並行make可以使失敗後重新開始工作而不重做所有已成功完成的工作變得簡單高效。它也可以管理限制並行性到合理數量的線程。

+0

你會說使用並行make將創建多個'thread'對象更好嗎? – 2013-02-16 16:32:37

+0

@ZacharyKniebel如果您單獨驅動每個命令並且可以具有顯着的並行性,則需要大量線程來消耗每個命令的標準輸出和標準錯誤。我不建議直接從Java驅動大量命令。無論您使用make還是其他腳本,我認爲您應該將管理命令委託給某種腳本語言。 – 2013-02-16 17:07:17

+0

聽起來對我很好。非常感謝你的幫助:) – 2013-02-16 17:10:00