GNU/Linux >> Linux の 問題 >  >> Linux

Gnu Parallel Vs&(i Mean Background)Vs Xargs -p?

.shで一連のタスクを実行することの違いや利点(ある場合)について混乱しています。 GNU parallelを使用したスクリプト

例えば。オーレ・タンゲの答え:

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 parallelは、
1台以上のコンピューターを使用してジョブを並列に実行するためのシェルツールです。 。一般的な入力は、
ファイルのリスト、ホストのリストです。 、ユーザーのリスト、URLのリスト、またはテーブルのリスト。

1台のコンピューターで実行している場合でも、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は、指定された数のジョブを並行して実行できますが、CPUコア数のジョブを並行して実行することはサポートされていません。
  • xargsは出力のグループ化をサポートしていないため、出力は一緒に実行される可能性があります。行の前半は1つのプロセスからのものであり、行の後半は別のプロセスからのものです。
  • xargsは出力の順序を維持することをサポートしていないため、xargsを使用してジョブを並行して実行する場合、最初のジョブが完了するまで2番目のジョブの出力を延期することはできません。
  • xargsは、リモートコンピューターでのジョブの実行をサポートしていません。
  • xargsはコンテキスト置換をサポートしていないため、引数を作成する必要があります。
関連:コンデンサとインダクタの間に電圧源がある場合、回路は並列RLCですか?
Linux
  1. 大文字と小文字を区別する GNU ソート

  2. ファイル許可ビットの後のドットは何を意味しますか?

  3. GNU Parallel を使用して rsync を並列化する

  1. GNUParallelを使用してLinuxコマンドラインでより多くのことを行う

  2. GNU 並列 - パラメータとして配列からの 2 つのパラメータ

  3. 改行で区切られた xargs

  1. GNUAutotoolsの紹介

  2. fgおよびbgコマンドを使用してLinuxバックグラウンドジョブを管理する方法

  3. cronジョブのトラブルシューティング