我有一堆我想並行執行的命令。這些命令幾乎完全相同。他們可以預計大約在同一時間,並可以完全獨立運行。他們可能看起來像:使用make來並行執行獨立任務
command -n 1 > log.1
command -n 2 > log.2
command -n 3 > log.3
...
command -n 4096 > log.4096
我可以在一個shell腳本發動所有的人都在並行,但系統會試圖加載比嚴格意義上更以保持CPU(S)忙(每個任務需要100%一個核心直到完成)。這會導致磁盤崩潰,並使整個事情變得比較不貪心的執行方式慢。
最好的方法可能是保持執行n
任務,其中n
是可用內核的數量。
我非常希望不要重新發明輪子。這個問題已經在Unix make
程序中解決(當與-j n
選項一起使用時)。我想知道是否也許是可以寫入上述通用的Makefile的規則,從而避免了線性尺寸的Makefile那會是什麼樣子:
all: log.1 log.2 ...
log.1:
command -n 1 > log.1
log.2:
command -n 2 > log.2
...
如果最好的解決辦法是不使用make
但另一個程序/實用程序,只要依賴關係合理(make
在這方面非常好),我都會接受。
'回聲{1..1024} | xargs -n 1 -P 4 echo'給予'1 3 2 5 4 ...'(bash 3)似乎是我想要的。我當時沒有考慮這個問題,但我也可以爲'1'..''N/n','N/n + 1'..'2N/n'編寫'n'順序腳本。 。只要片段平均出來的時間(它不是給定的)。 – 2010-11-05 16:10:12