バックグラウンドで複数のジョブを配置することは、単一のマシンの複数のコアを使用する良い方法です。parallel
ただし、ネットワークの複数のサーバーにジョブを分散できます。からman parallel
:
GNU parallelは、1 つ以上のコンピューターを使用してジョブを並列実行するためのシェルツールです 。典型的な入力は、ファイルのリスト、ホストのリスト、ユーザーのリスト、URLのリスト、またはテーブルのリストです。
単一のコンピューターで実行している場合でもparallel
、ジョブの並列化方法をはるかに制御できます。man
ページから次の例をご覧ください。
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
ジョブの実行方法と、使用可能なリソースの量を微調整する機能を提供します。このツールの威力を本当に見たい場合は、そのマニュアルをご覧になるか、少なくともツールが提供する例をご覧ください。
単純なバックグラウンド処理は、並列処理と比較するための洗練度のレベルに実際には近づきません。どのようにparallel
異なるかについてはxargs
、GNUクラウドはここで素晴らしい内訳を与えます。より顕著なポイントのいくつかは次のとおりです。
- xargsは、特殊文字(スペース、 '、 "など)を不適切に処理します。
- xargsは、指定された数のジョブを並行して実行できますが、number-of-cpu-coresジョブを並行して実行することはサポートしていません。
- xargsは出力のグループ化をサポートしていないため、出力が一緒に実行される場合があります。たとえば、行の前半はあるプロセスからのもので、行の後半は別のプロセスからのものです。
- xargsは出力の順序を維持することをサポートしていません。したがって、xargsを使用してジョブを並行して実行する場合、2番目のジョブの出力は最初のジョブが完了するまで延期できません。
- xargsは、リモートコンピューターでのジョブの実行をサポートしていません。
- xargsはコンテキスト置換をサポートしていないため、引数を作成する必要があります。
parallel
構文を嫌い、さらにもう1つの新しいブランドのキーボードフェイスロールを記念します。しかし、コア/ジョブ間の自動バランスは価値があると思います...?