2010-08-24 9 views
6

Ich war auf der Suche über Prozessmodell von Erlang über das Internet und fand heraus, einige Grafiken alt textslides 3-4 in einen des von Joe Armstrong gegeben Gesprächs. Sie zeigt eine Menge Unterschied zwischen Prozess Erstellung und Nachrichtenlaufzeit zwischen Erlang, Java und C#. Kann jemand mir den Grund hinter solchen großen Unterschied sagen?Warum Erlang Prozesserstellung und Message-Passing-Zeit weniger als Java und C#

+0

Die Grafik und die Folien liefern zu wenig Information, um zu wissen, was hier tatsächlich gemessen wurde. Es ist nicht einmal klar, was als ein "Prozess" betrachtet wird. Zum Beispiel sieht es so aus, als ob ein Erlang-Prozess kein Prozess auf Betriebssystemebene ist, auf dem sich Java oder C# befinden. Es scheint wie Äpfel und Orangen zu vergleichen ... –

+3

@ 0xA3: Erlang Prozesse verhält sich wie Prozesse aus Sicht des Entwicklers. Sie sind eine isolierte Ausführungseinheit. Sie verhalten sich wie Prozesse, nicht wie Threads. Andere haben den Fehler, dass sie Prozesse oder Threads auf Betriebssystemebene verwenden und nicht dasselbe nützliche Tool zur Lösung realer Probleme bereitstellen. Wenn Sie dasselbe tun wollen wie in Erlang in diesen Sprachen, müssen Sie das verwenden, was Sie können, damit der Vergleich richtig ist. –

+0

mögliches Duplikat von [Technisch warum sind Prozesse in Erlang effizienter als OS-Threads?] (Http://stackoverflow.com/questions/2708033/technically-why-is-processes-in-erlang-more-efficient-than-os -threads) – Christian

Antwort

7

In Erlang sind Prozesse keine realen Prozesse. Sie sind leichte Strukturen, die von der Sprache gehandhabt werden. Die Nachrichtenübergabe wird ebenfalls von der Sprache gehandhabt, wenn möglich mit gemeinsam genutztem Speicher.

Auf der anderen Seite verwenden andere Sprachen echte Threads/Prozesse, da sie keine integrierten Lichtstrukturen wie diese haben. Daher sind diese Strukturen etwas schwerer, benutzen Thread-Primitive um zu kommunizieren (langsamer).

Ich weiß nicht über Ihre Grafik, aber ich denke, es zeigt, dass Erlangs Prozesse besser sind. Es wird getan, Dinge zu vergleichen, die von Natur aus unterschiedlich sind, aber es zeigt, dass Erlang rockt, um eigenständige Objekte zu modellieren, die mit Nachrichten kommunizieren (Dinge, die man in anderen Sprachen nicht wirklich tun kann).

+5

Ich würde nicht sagen, dass es Shared Memory verwendet, da Daten (fast) immer zwischen den Heaps der Prozesse kopiert werden. Trotzdem geschieht alles innerhalb eines Betriebssystemprozesses. – gleber

+1

Ich denke, Scharron meinte, dass, während konzeptionell nichts geteilt wird, es für die VM möglich ist, Daten zu teilen, indem sie Zeiger weitergibt, anstatt die Daten zu kopieren, als eine Optimierung. –

3

Erlang Prozesse sind sehr geringes Gewicht. Eine Implementierung muss nicht einmal einen Betriebssystem-Thread einem Erlang-Prozess zuordnen. Das hat mit der funktionalen Natur von Erlang zu tun.

+1

Nicht wirklich damit verbunden, dass Erlang überhaupt eine funktionale Sprache ist. Jede Sprache mit billigen Prozessen und Nachrichtenübergabe würde ausreichen. (Nicht, dass es andere Sprachen mit Erlang-ähnlichen Prozessen gibt ...) –

+1

Eigentlich ist es sehr verwandt damit, dass Erlang eine funktionale Sprache ist, da die funktionale Natur von Single-Assignment-Variablen viel von der Last der Prozessisolation wegnimmt, weil das möglich ist Keine geteilten Updates oder Zugriffskonflikte sein, über die man sich Sorgen machen muss. Fügen Sie Nachrichtenkopieren statt Referenzieren hinzu und Sie haben ein Rezept für wirklich leichte Prozesse. – Alan

+0

@Alan: Ja, genau das hatte ich vor, danke, dass du es für mich aufgeschrieben hast. :) –

Verwandte Themen