2011-01-15 7 views
1

Während ich meine Reise durch die wundervolle Welt von Erlang mache, bemerke ich ihre Schönheit, aber noch wichtiger, ich bemerke ihre Geschwindigkeit. Was mich wundern lässt, da Erlang so gut darin ist, leichte Prozesse hervorzubringen, macht es Sinn, es als Wrapper für andere Prozesse zu verwenden.Mit Erlang spawnen mehrere externe Prozesse

Als Beispiel verwende ich rspec, um Tests für Ruby zu schreiben. Sagen wir, ich habe 10.000 Tests, die alle unabhängig voneinander laufen können, ohne Probleme. Wäre es sinnvoll, Erlang spawn 10.000 rspecs und führen Sie jeden Test gleichzeitig im Gegensatz zu rspec nacheinander ausgeführt werden? Oder ist das nur eine völlig lächerliche Idee?

Antwort

6

Sie verwechseln Erlang-Prozesse mit OS-Prozessen. Die Erlang-VM wird in einem Betriebssystemprozess ausgeführt, in dem Erlang-Programme (in Strahldateien kompiliert) interpretiert und ausgeführt werden. Wenn ein Erlang-Programm spawn oder spawn_link aufruft, erstellt die VM einen internen Prozess, der vom internen VM-Scheduler ausgeführt wird. Das OS weiß nichts über diese Prozesse.

Wenn jedoch ein Erlang-Programm einen Port erzeugt (die übliche Art, in Ihrem Fall externe Programme wie den Ruby-Interpreter auszuführen), wird ein neuer Betriebssystemprozess außerhalb der VM erstellt. Dieser externe Prozess kommuniziert über die Standardeingabe mit der VM. Wenn Sie die Prozesse in Ihrem System sehen, werden Sie feststellen, dass es einen Strahlprozess (Erlang VM) und einen Rubinprozess gibt.

So OS Prozesse von der erlang VM starten werden keinen Unterschied machen im Vergleich zu sie auf andere Weise starten (mit der Hand, in einer Shell-Skript, usw.)

+0

Was würde einen Unterschied machen, wenn @elmt diejenigen hatte 10000 Tests wurden in Erlang-Code geschrieben und konnten als Erlang-Prozesse ausgeführt werden, ohne andere OS-Prozesse einzubeziehen. – ndim

+0

Wahr. Aber in diesem Fall, da @elt Rubin testen möchte, wäre das nicht möglich. –

+0

Macht Sinn. Ich entschuldige mich für meine Unwissenheit, gerade jetzt meine Füße nass in Erlang. – elmt

2

Ich vermute, dass rspecs schwergewichtige Prozesse sind, in welchem ​​Fall 10.000 von ihnen jedes Betriebssystem in die Knie zwingen, auch wenn sie in Erlang-Prozessen "eingewickelt" sind. Erlangs Prozesse sind keine echten Prozesse im Sinne des Betriebssystems, und sie können normale OS-Prozesse nicht mit ihren "magischen" Eigenschaften erfüllen. Sie fragen nur das Betriebssystem, um den Prozess zu spawnen.

Verwandte Themen