2011-01-15 16 views
1

私はErlangの素晴らしい世界を旅しています。私はその美しさに気付きますが、もっと重要なことに、私はそのスピードに気付きます。 Erlangは軽量プロセスを生成する上で非常に優れているので、他のプロセスを包むラッパーとして使用することは理にかなっています。Erlangを使用して複数の外部プロセスを起動する

例として、私はrspecを使ってrubyのテストを書く。私はすべてが問題なく独立に動くことができる10,000テストを持っているとします。 Erlangを使って10,000 rspecを生成し、rspecとは逆に各テストを同時に実行するのは理にかなっていますか?それとも、まったくばかげた考えですか?

答えて

6

erlangプロセスとOSプロセスを混同しています。 erlang VMはOSプロセスで実行され、erlangプログラム(ビームファイルでコンパイル)を解釈し実行します。 erlangプログラムがspawnまたはspawn_linkを呼び出すと、VMは内部のVMスケジューラによって実行される内部プロセスを作成します。 OSはこれらのプロセスについて何も知らない。

しかし、erlangプログラムが(あなたのケースではRubyインタプリタのような外部プログラムを実行する通常の方法で)erlangプログラムを起動すると、VMの外部に新しいOSプロセスが作成されます。その外部プロセスは、標準入力出力を使用してVMと通信します。システム内のプロセスを見ると、1つのビームプロセス(erlang VM)と1つのルビープロセスがあることに気付くでしょう。 ErlangのVMから

ので、起動するOSのプロセスは@elmtがそれらを持っていた場合の違いになるだろう何

+0

がある(、シェルスクリプトでは、手でなど)を任意の他の手段によって、それらを起動するに比べてどんな違いをすることはありません10000テストはErlangコードで記述され、他のOSプロセスを必要とせずにErlangプロセスとして実行できます。 – ndim

+0

真。しかしこの場合、@ elmtはルビをテストしたいので、それは不可能です。 –

+0

意味があります。私は私の無知を謝罪し、ちょうど今、私の足をエルランに濡らしている。 – elmt

2

rspecsが重量プロセスであると推測しています。その場合、Erlangプロセスで「ラップ」されていても10,000個のOSが無傷になります。 Erlangのプロセスは、OSの意味では本物のプロセスではなく、通常のOSプロセスに「魔法のような」特性を持たせることはできません。彼らはOSにプロセスを起動するよう依頼するだけです。

関連する問題