Ich war auf der Suche über Prozessmodell von Erlang über das Internet und fand heraus, einige Grafiken slides 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#
Antwort
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).
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
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. –
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.
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 ...) –
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
@Alan: Ja, genau das hatte ich vor, danke, dass du es für mich aufgeschrieben hast. :) –
- 1. CouchBase 1.8 und 2.0 Erlang SDKs? Warum ist Erlang ausgelassen?
- 2. State of Erlang und C/C++ - Integration?
- 3. Wortgrenze und weniger als das Zeichen
- 4. Java und C# Interoperabilität
- 5. Keeping definiert synchron zwischen Erlang und C
- 6. Senden von Daten zwischen Erlang und C++
- 7. Warum ist die Präprozessor-Verwendung in anderen Sprachen als C/C++/ObjC weniger verbreitet?
- 8. 'Größer als oder gleich' und 'weniger als oder gleich' CODEIGNITER
- 9. SQL Tabellenstruktur für häufige mehr als und weniger als Abfragen
- 10. SQL-Zeichenfolge Vergleich, größer als und weniger als Operatoren
- 11. Erlang globale und lokale Namen
- 12. Erlang: include Modul und Anruffunktionen
- 13. Erlang und websockets
- 14. Erlang und Antlr
- 15. Java: Zugriffsmodifizierer restriktiver als "geschützt", weniger restriktiv als "privat"?
- 16. Warum benötigt die JVM weniger Speicher als -Xms?
- 17. GCC ändert weniger als zu weniger als oder gleich
- 18. @viewport, @media und weniger
- 19. Erlang Web-Framework und SSL?
- 20. Erlang Compilation - Erlang als eigenständige ausführbare
- 21. Kompilieren weniger mit Gulp-Useref und Schluck-weniger?
- 22. Erlang Kodierungsstandards und gute Praktiken
- 23. Warum oder Bedingung funktioniert anders als mit Java und SQL
- 24. Java Erlang Socket Kommunikation
- 25. namespace std Überlastung weniger als
- 26. Warum bekomme ich in RefData weniger Wertpapiere als eine Anfrage?
- 27. weniger als oder gleich
- 28. Objekte in Java und C#
- 29. Suchen und Löschen von Zeilen weniger als X Zeichen lang
- 30. SDCC und malloc() - Zuweisung viel weniger Speicher als verfügbar ist
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 ... –
@ 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. –
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