.sh
を使用してGNU parallel
スクリプトで一連のタスクを実行することの違いまたは利点(ある場合)について混乱しています
例えば。 Ole Tange の答え:
parallel ./pngout -s0 {} R{} ::: *.png
それらをループバックして&
に置くのではなく、.
例えば。 frostschutz の答え:
#copied from the link for illustration
for stuff in things
do
( something
with
stuff ) &
done
wait # for all the something with stuff
要するに、それらは構文的または実際的に異なるのですか?そして、実際に異なる場合、それぞれをいつ使用すればよいですか?
複数のジョブをバックグラウンドで配置することは、単一のマシンの複数のコアを使用する良い方法です。ただし、parallel
を使用すると、ネットワークの複数のサーバーにジョブを分散できます。 man parallel
から:
GNUパラレルは、1つまたは複数のコンピューターを使用してジョブを並列に実行するためのシェルツールです。典型的な入力は、ファイルのリスト、ホストのリスト、ユーザーのリスト、URLのリスト、またはテーブルのリストです。
単一のコンピューターで実行している場合でも、parallel
を使用すると、ジョブの並列化方法をはるかに制御できます。 man
pageから次の例を見てください。
To convert *.wav to *.mp3 using LAME running one process per CPU core
run:
parallel lame {} -o {.}.mp3 ::: *.wav
OK、あなたは同じことをすることができます
for i in *wav; do lame "$i" -o "${i%.wav}.mp3" & done
ただし、これは長くて扱いにくく、さらに重要なことに、.wav
ファイルと同じ数のジョブを起動します。数千のファイルでこれを実行すると、通常のラップトップがひざまずく可能性があります。一方、parallel
は、CPUコアごとに1つのジョブを起動し、すべてを適切に整頓します。
基本的に、parallel
を使用すると、ジョブの実行方法と使用可能なリソースの使用量を微調整できます。このツールの機能を実際に確認したい場合は、その manual 、または少なくとも、このツールが提供する例を確認してください。
単純なバックグラウンド処理は、並列処理と比較するための高度なレベルに本当に近いところはありません。 parallel
がxargs
とどのように異なるかについては、GNU群衆がナイスな内訳を与える here 。より顕著なポイントのいくつかは: