2017-09-25 8 views
2

100のネットワーク(非CPUの強烈な)ジョブを並行して実行し、最良の方法を理解したい。コンテキスト切り替えのオーバーヘッドを最小限に抑えながらxargsを使用した並列ネットワークタスクの開始

具体的には、xargsを使用して100以上のジョブを実行することができますが、その欠点は何ですか?

私は実際のパケット処理よりも多くのコンテキスト切り替えが行われていることを理解しています。 そのポイントはどこにあるのか、それを最小限に抑える最良の方法は何ですか?

たとえば、他のxargsなどを使用するための優れたツールはありますか?

+0

だけループをし、それぞれの関数を呼び出しますか?単なるループです。 –

+0

@MartijnPieters私は、目的をはるかに明確にするために投稿を更新しました。主な関心事は、100以上のネットワークジョブを起動し、同時にコンテキスト切り替えオーバーヘッドを最小限に抑えることです。 – GNettlefold

+0

これは広すぎるかもしれないと思っていますが、とにかく再開しました。 –

答えて

1

多くの場合、味の問題になります。

seq 1000 | parallel -j100 wget https://foo.bar/image{}.jpg 

あなたは100台のサーバーからデータをしたいとあなたはフルラインを毎回取得する場合:

parallel -a servers.txt -j0 --line-buffer my_connect {} 

あなたが並列に100枚の画像を取得するために、このような何かを行うことができますパラレルGNUを使用して

または:

parallel -a servers.txt -j0 --line-buffer --tag my_connect {} 

GNU Parallelは一般的な並列化プログラムで、並行して簡単にジョブを実行できます。 n同じマシンまたはsshにアクセスできる複数のマシンで実行します。あなたは4つのCPU上で実行したい32種類のジョブを持っている場合

、並列化する単純な方法は、各CPUの8つのジョブを実行することです:

Simple scheduling

GNUパラレルを代わりにするときに、新しいプロセスを生成します1つの仕上げ - アクティブなCPUを維持するため、時間を節約:

GNU Parallel scheduling

インストール

セキュリティ上の理由から、パッケージマネージャーにGNU Parallelをインストールする必要がありますが、GNU Parallelが配布用にパッケージ化されていない場合は、ルートアクセスを必要としない個人用インストールを行うことができます。それは、これを行うことにより、10秒で行うことができますhttp://www.gnu.org/software/parallel/man.html

は、イントロビデオを見る:その他のインストールオプションについては

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash 

が見http://git.savannah.gnu.org/cgit/parallel.git/tree/README

は、より多くの例を参照してください詳細をご覧くださいhttps://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

ウォークスルーt彼はチュートリアル:http://www.gnu.org/software/parallel/parallel_tutorial.html

サインアップメールリストのサポートを取得する:ファイル上https://lists.gnu.org/mailman/listinfo/parallel

+0

レスありがとうございました。私があなたのために持っている1つの質問は、これが長時間走っている仕事のためにうまくいくかどうかです。それは、定義されていない寿命(例えば、ウェブサーバ)を有するものである。 – GNettlefold

+0

おそらくもっと具体的にする必要があります。 100台のWebサーバーを並行して稼動させますか? –

+0

私は約100ストリームのデータを消費したいと思います。約80人が2秒ごとに1つのイベントを持ち、残りの20人は1秒あたり1つのイベントを持っています。データストリームは連続的ですが、決して終了しません。 – GNettlefold

関連する問題