Unix
通過並行處理找到更好的 unix?
unix
find(1)
實用程序非常有用,它允許我對許多符合特定規範的文件執行操作,例如find /dump -type f -name '*.xml' -exec java -jar ProcessFile.jar {} \;
以上可能會在特定目錄中的每個 XML 文件上執行腳本或工具。
假設我的腳本/程序佔用大量 CPU 時間,並且我有 8 個處理器。一次處理多達 8 個文件會很好。
-j
GNU make 允許使用標誌進行並行作業處理,但find
似乎沒有這樣的功能。有沒有一種替代的通用作業調度方法來解決這個問題?
xargs
帶有-P
選項(程序數)。假設我想壓縮 4-cpu 機器上目錄中的所有日誌文件:find . -name '*.log' -mtime +3 -print0 | xargs -0 -P 4 bzip2
您也可以說
-n <number>
每個程序的最大工作單元數。所以說我有 2500 個文件,我說:find . -name '*.log' -mtime +3 -print0 | xargs -0 -n 500 -P 4 bzip2
這將啟動 4 個
bzip2
程序,每個程序有 500 個文件,然後當第一個程序完成時,另一個程序將啟動最後 500 個文件。不知道為什麼前面的答案使用
xargs
andmake
,你有兩個並行引擎!