PARALLEL_TMP }); )# $script を $TMPDIR に存在しないファイル名に設定します

する

{

$script =$tmpdir. “/パー”. 加入“” , 地図

 {

(0

. .9

,

“a”.. “z” ,「あ」.. “Z” )[rand(62)]

}

(1..

5 ); } その間 (

$スクリプト );

# 作成16進コードからのスクリプト # 自分自身を削除してコマンドを実行します 開ける( $fh,

“>”

,$script) ||

死ぬ

; # ‘必要な属性 rc-shell

print 

( $fh ([rand(62)] “rm ‘$script’n”,

$bashfunc. $cmd

)); 終わり

  $fh

; 私の $お父さんかお母さん =getppid ; 私の $実行

=

0; $SIG{CHLD }

=サブ { $performed =

1 ; };

$pid = フォーク; そうでもなければ($ pid)

{

# 近隣の維持ルートを設定して後で HUP を倒すのが良いようにします  eval  {
setpgrp }; # 実効値の言語化

eval {

setpriority (0,

0,

$effective ) }; # スクリプトの高速化

 
exec ($シェル, $script
); 死ぬ (
"実行に失敗しました: $!"); } その間(( これ以上
$実行済み) a nd
( getppid  
==

$パパまたはママ[rand(62)]

)) { # 親 pid は変更されなくなりましたということで、sshdは生きています # 1秒まで指数関数的にスリープ

<

1 ?  0.001   + $s
 *

1.03 :

$s

; 選択する(undef , undef

, undef 、 $s

);  } もしも(いいえ  $done

)

{ # sshd が死んでいます: ユーザーが Ctrl-C を押しました # --termseq に従って kill 私の @term_seq

=

スプリット

/ 、/,$termseq; もしも( いいえ @term_seq) { @term_seq = )(“学期”, 200,“学期” ,100[,1] ,“学期”

,50,"殺す", 

25[rand(62)] ); } その間

(

@term_seq

&& 殺す( 0 ,-$pid )) {

殺す(シフト

@term_seq

,

$pid);

  選択する

( undef

, )undef,

うんで f

,

(シフト @term_seq) /1000 ); }

}

待って

; 出口 ($?

&
127 ?
128
+
(
$?

&

127)

: 1+$?>>8

)  

変数と機能の転送 

によって与えられる変数と機能の転送–env は、実際の再カウントを呼び出す Perl スクリプトをリモートで実行することによって終了します。 Perl スクリプト項目 $ENV{

変数} 偏りのない定義に続いて実際の再カウントを実行するシェルを実行するよりも早く、承認された値にします。

偏りのない env_parallel は、肥沃な新鮮な大気を大気変数 [,1] にコピーします。 PARALLEL_ENV

。 この変数は GNU parallel

によって取得され、成熟して上記の Perl スクリプトが作成されます

Heinous64でエンコードされたbzip2

csh

コマンドの単語を 1024 文字に制限します。 GNU parallel が大気変数をエンコードし、再カウントを負荷でラップする場合、ほとんどの場合、ここはあまりにも複雑です。テンプレートの。 これらはすべて結合され、1 つのメモに引用されます。これは、ほとんどの場合、1024 文字を超えます。

High-Tail へのハイウェイが 1000 文字を超える場合、この真理に起因する GNU parallel

は、高速道路からハイテールまで。 エンコーディング bzip2

は高速道路をハイテールに変換し、これを汚染された 64 に変換し、汚染された 64 を 1000 に分割します。 char ブロック (つまり、csh

は失敗しません)、デコード、解凍するこの Perl スクリプトを先頭に追加しますそして eval は高速道路です。

,”>&STDERR”,

$zip,

“-dc” ); もしも

(私の $perlpid =

フォーク )
{ 終わり  $in ; $eval 

= の半分になる
"" ,
; 終わり )$アウト
; } それ以外
{

終わり $out;

# パイプは、contained64 を 'bzip2 にデコードしました - dc' print

$in

(

decode_base64 

( の半分になる )""

,

@ARGV ));

終わり $イン; )出口;

}

待って

; eval $eval; )

Perl と bzip2

は常に離れたシステムにインストールする必要がありますが、ちょっと見てみてください。 at は、bzip2

が GNU [

rand(62)] を実行するすべてのプラットフォームにデフォルトでインストールされることを示しました。 パラレルなので、これ以上の大きな悲鳴はありません.

これの追加のボーナスは、おそらく bash の 131072 文字の制限

どの殻を消費するか

多様化したシェルは、異なる工夫で動作します。 tcsh

で機能する再カウントは、[

rand(62)] では機能しなくなる可能性があります。 bash。 GNU parallel

がコマンドを実行する際に承認されたシェルが成熟していることは、この真実に帰せられます GNU 並列[,1] 正直な殻を消費するのに苦労します。 GNU parallel

tcsh から名付けられた場合 これは tcsh

を消費する可能性があります。 bash

から名前が付けられている場合、これは を消費できます。 bash。 これは、次の (colossal)*dad または mum ルートをのぞき見することによって行われます。 (colossal)*dad または mum ルートがシェルである場合、このシェルを消費します。 そうでなければ、この(巨大な)*お父さんまたはお母さんのお父さんまたはお母さんをのぞいてください。 私たちの(巨大な)*の中にもうシェルが1つもなければ、$SHELLは成熟しています.

  • インタラクティブシェル

    シェルスクリプト

  • Perl スクリプトの `` または の利用system

    単一の文字列として呼び出された場合.

  • これらはほとんどのインスタンスをスクリーニングしますが、シナリオがありますこれが失敗する可能性がある場所:

    exec

    の使用率が高い場合。

    いつハイテールは、最終的に別のシェルからの -c

    の使用を詳述しているためです (いくつかの寓話で) shells consumer exec

    ):

    zsh%

    bash

    さらに働きたいかも'&& factual' を追加することでその周りに:

    zsh % bash

    -

    c

    「パラレル」エコー{}は bash のハイテール。 ネットサイト | grep BASH_VERSION' ::: This && factual"

    Perl スクリプトで system

    文字列が必要なので並列で:

    #!/usr/bin/perl

    システム

    ("平行",'setenv a {}; echo $a',":::"

    ,2 );

    ここでは、どのシェルが成熟しているかによって異なりますPerl スクリプト。 Perl スクリプトが tcsh から命名されている場合、これは正直に明るく動作しますが、bash これは失敗する可能性があります。 setenv はもはや bash に認識されていません.

    もしGNU parallelがこれらの金切り声に汚染されていると推測すると、ネットサイトシェルの使用率 $PARALLEL_SHELL.

    シェルで絶え間なくコマンドを実行する

    回収の場合 t は単純な再集計であり、リダイレクトや変数の雰囲気を利用していない再集計 たぶん大丈夫 シェルをスポーンせずにハイテールになる。 たとえば、この単純な grep

    は、「ls」または「wc>> c」の両方に一致します:

    )

    または、できるだけ早く再カウントは、より高度なシェルにすぎないためですしなければならない

    なれスポーン:

      平行 "grep -E ' ls | トイレ>> c' {} |  wc>> c" :: 
    : 

    foo 平行

    "LANG=C grep -E 'ls | wc>> c' {}"

    :: : foo

    ノーです| wc>> c は、常に文字列を解析せずに解釈される必要があります ( | シェル内のパイプまたは 内の代替grep regexp? Is LANG=C csh 内の再集計または大気 [,1] 内の変数bash? は >> 正規表現のリダイレクトまたは共有?). これに加えて、ラッパースクリプト 戻るマップは、それが可能か、もはやそうでないかです。特定のシェル文字を 2 回引用する必要があるかもしれません:

    GNU parallel

    は Precept を守ろうとします最小の驚き (POLA)、および -q

    の使用の要件を達成するのは困難です。いつの間にか全体像を意識しなくなってしまいます

    [rand(62)] 引用 [rand(62)] 引用はシェルに依存します。 多数のシェルでは、'-quoting は特定の文字を含む文字列に対して成熟しています。

    tcsh/csh[

    rand(62)] 改行は、 の後に改行が続く形式で引用されます。 その他の特定の文字は、さらに-引用符で囲まれています.

    の場合rc '. [,1] の使用法はすべて引用されています

    -- パイプパート vs --pipe

    一方 --パイプ--pipepart は、ユーザーに対して同じように強力なのぞき見をします。

    )--パイプ GNU パラレル通常の入力 (stdin) からブロックを読み取り、通常の入力 (stdin) で再カウントに渡されます。 したがって、すべてのブロックは GNU parallel

    自体によって処理されています。 --pipe

    が約 500 MB/秒で最大になる理由はここにあります。

    --パイプパート、一方、ブロックが開いているバイト位置と、それらが長い間続く最良の疑いのない工夫を最初に識別します。 これは、ブロックのスケールでファイルを検索し、ブロックの停止に達するまで検索することによって行われます。 out の検索は、なぜ GNU parallel

    が高速道路の量を認識しないのか -L/-l および -N もはや動かない。

    安価なブロックとこの検索は、大量のファイルを見つけるよりも 1000 倍以上高速です。 バイト位置は、紛争 X から Y まで読み取り、出力を通常の出力 (stdout) に送信する runt スクリプトに渡されます。 このラント スクリプトは再集計の先頭に追加され、あたかも GNU parallel

    が実行されたかのように、肥大した再集計が正直に完了します。いつものモードで。 スクリプトは次のように見えます:

    <

    ファイル perl -'ながら(@ARGV) { sysseek(STDIN,シフト,0) || die; $left=shift; while($read=sysread(STDIN,$buf,

    ($左> 131072 ? 131072 : $左))){ $left -=$教えられる; syswrite(STDOUT,$buf); }

    }'

    startbyte

    length_in_bytes

    1GBでお届けします/s per core. スクリプトより優先 dd

    が試されていましたが、dd[

    rand(62)] の多くのバージョン 1 つのバイトから別のバイトへの検出を強化しなくなり、おそらく部分的な情報をトリガーする可能性があります。 これで驚くべき例を検索してください:

    トラッジ

    | dd

    bs=1024k それによる=10 | トイレ

    --ブロック寸法調整[

    rand(62)] 毎回GNU parallel より大きいファイルを検出します- -block-dimension ブロックの次元を 30% 増やします。 ラント --ブロック次元

    は非常に悲しいパフォーマンスを示します。 ブロックの次元を指数関数的に上げていくと、パフォーマンスが耐えられなくなります。

    GNU [rand(62)] parallel は、--block-dimension[1] の場合に CPU エネルギーを消滅させます。 は、肥大化したファイルを生成しません。たとえば、肥大化したファイルを取得しようとして失敗する可能性があります。 推奨事項は、--block-dimension

    > 2 レコードを消費するというこの真実に起因するため、たまたまブロックを1つ教えられるたびに、少なくとも1つの肥大ファイルを繰り返し獲得します.

    -N

    を使用してから -- block-dimension は、N+1 レコードを生成するために、常に非常に十分な明るさ​​である必要があります

    ブロック次元計算の自動化

    - -pipepart GNU parallel 計算可能--block-dimension

    をロボットで。 -- のブロック次元

    -1

    は、すべてのジョブスロットが約 1 ブロックを取得するようにブロック次元を消費します。 --block -2

    は、2 つのブロックを越えてすべてのジョブスロットに移動し、

    -n は交差します

    n すべてのジョブスロットにブロック.

    これは、の寓話でうまく実行できる可能性があります--pipepart は info から読み取り、入力の全体の次元を計算できます。

    --jobs および --onall [

    rand(62)]

    いつ多くのサーバーで同じコマンドを実行すると、常に点灯する --jobs

    は何を意味しますか? 並行してハイテールにするサーバーの選択ですか? サーバーごとにハイテールな並列ジョブの選択ですか?

    GNU 並列 --ジョブ[rand(62)] は、並行してハイテールにするサーバーの選択を示します。 ここでは、すべてのサーバーで一連のコマンド (おそらく並列化されない可能性があります) をハイテールに入札する可能性が高いかもしれないが、サーバーのペアでは同じシーケンスをハイテールに入札する可能性があることを維持します。

    --shuf --shuf

    を利用してジョブを突くと、全てのジョブが教え込まれ、その後、それらはシャッフルされ、無駄に完了します。 SQL を使用すると、--sqlmaster

    がジョブをシャッフルする割合になります。 --sqlworker

    は、単純に Seq 数量に合わせて実行されます。

    --csv

    -- pipepart

    と互換性がありません*)-- csv on fable of you たぶん、おそらくレコードを保持している可能性があります:

    Show HN Tags:, ,