Ich denke, die Verwendung von ETS wird immer noch ähnliche Nebenwirkungen einführen.Was sind die Vorteile von Erlang anstelle von Prozesswörterbüchern innerhalb eines Prozesses?
Antwort
ETS wird nicht als Garbage Collection erfasst, da sie außerhalb von Erlang-Prozessen in einem Heap gespeichert wird. Das heißt, wenn Sie etwas in Ets stecken, wird es hineinkopiert, und wenn Sie es herausnehmen, erhalten Sie eine Kopie in Ihrem Prozess. Viele ETS-Lookups können dann zu Überkonsum in Ihrem Prozess führen (dies ist jedoch nur für sehr hohe Threads relevant).
Das Prozesswörterbuch ist Müll gesammelt. Es wird im eigenen Heap des Prozesses gespeichert. Wenn Sie also darin nachschlagen, erhalten Sie einen Hinweis auf genau denselben Wert, den Sie eingeben. Die im Prozesswörterbuch gespeicherten Werte werden nicht komprimiert.
Beide Ansätze sind nicht rein, d. H. Sie haben Nebenwirkungen. Ja, es ist schlecht, und ja, wir haben beide Alternativen.
Vorteile von ETS über Prozess-Wörterbuch sind:
- Andere Verfahren der ETS-Tabelle direkt zugreifen können suchen Sie
- ETS ergibt/Matching/Iteration Einrichtungen, während der Prozess-Wörterbuch nur ein Schlüssel-Wert-Speicher ist .
- Sie können Tabellen in einem Schritt in Dateien speichern/laden
- Wenn Ihr Besitzer Prozess stirbt kann die Tabelle von jemand anderem vererbt werden, so dass die Daten nicht verloren gehen.
ETS verhält sich mehr oder weniger so, als wäre die Tabelle in einem separaten Prozess und Anforderungen sind Nachrichten, die an diesen Prozess gesendet werden. Während es nicht mit Prozessen implementiert ist, werden die Eigenschaften von ETS so modelliert. Es ist tatsächlich möglich, ETS mit Prozessen zu implementieren.
Dies bedeutet, dass die Nebeneffekteigenschaften mit dem Rest von Erlang konsistent sind.
Das Prozesswörterbuch ist wie nichts anderes in Erlang und fügte hinzu, es war ein großer Fehler. Es gibt keinen Grund, das Prozesswörterbuch anstelle eines der lokalen Wörterbücher wie dict oder gb_trees zu verwenden.
Ich denke, ein Unterschied zwischen der ETS und der "prozessbasierten ETS" wäre, dass auf die erstere bei der Verwendung feiner Sperren wirklich gleichzeitig zugegriffen werden kann, während die letztere immer die Synchronisierung erzwingt (auch Serialisierung). – Zed
Nicht wirklich von einem Prozess, da der Zugriff auf ETS synchron ist, so dass der "rufende" Prozess warten muss, bis er eine "Antwort" von ETS erhält. Der Unterschied besteht darin, dass das Prozesswörterbuch im Kontext dieses Prozesses stets eins ist, während die ETS ein synchronisierter Zugriff auf gemeinsam genutzte Daten ist. – rvirding
Ich sehe, Rvirding hat kommentiert, und er ist einer der Gurus von Erlang, aber in diesem Punkt demütige ich demütig. Ich sehe ein Prozesswörterbuch für Housekeeping-Funktionen innerhalb eines Prozesses (und habe es bereits verwendet). Manchmal müssen wir den Status innerhalb eines Prozesses für eine Funktion speichern, die nicht Teil der Hauptfunktion der Prozesse ist. Beispielsweise kann ein Logger den Status beibehalten und der Loggerstatus in die Hauptanwendungslogik ist schlecht. –
Kein Zweifel, ETS hat viel mehr Funktionalität und ist anspruchsvoller. Aber ...
Da die Prozess Wörterbuch Aktualisierung/Suchoperationen nur die Referenzen zu bewegen, nicht die gesamten Daten (siehe die genaue Antwort von Christian), kann es viel schneller sein, vor allem für große Datenstrukturen. Sobald ich einen Teil des Codes umstrukturiert habe, um die großen und häufig zugänglichen Datenstrukturen in proc zu halten. dict anstelle von ETS und wir hatten eine 30% ige Beschleunigung in diesem Teil des Codes.
In vielen Fällen wird auf die Daten nur in einem einzigen Prozess zugegriffen. In diesem Fall sehe ich keinen großen theoretischen Unterschied zwischen dem proc.dict und ETS. Beide dienen dazu, Nebenwirkungen im Gedächtnis zu halten. Außerdem können Sie die proc.dict eines anderen Prozesses zugreifen wie
process_info (whereis (net_kernel), Wörterbuch).
- 1. Was sind die Vorteile von Cassini anstelle von IIS?
- 2. Was sind die Vorteile von Subversion?
- 3. Was sind die Vorteile eines Fehlers?
- 4. Was sind die Vorteile von "Staircase" Branching?
- 5. Was sind die Vorteile von Conduit-Resten?
- 6. Was sind die Vorteile von Lazy Evaluation?
- 7. Was sind die Vorteile von Java?
- 8. Was sind die Vorteile von Ressourcendateien (.resx)?
- 9. Was sind die Vorteile von Asynchronous HTTP
- 10. Was sind die Vorteile von VistaDB
- 11. Was sind die größten Vorteile von LLVM?
- 12. Was sind die Vorteile von NSBinaryStoreType?
- 13. Was sind die Vorteile von Inline-Javascript?
- 14. Was sind die Vorteile von Auto-Mapper?
- 15. Was sind die Vorteile von Persistenz Ignoranz?
- 16. Was sind die Vorteile/Vorteile der Verwendung von Python 3?
- 17. Was sind die Vorteile/Nachteile der Verwendung eines CTE?
- 18. Was sind die Vorteile von Bytecode gegenüber nativem Code?
- 19. Was sind die Vorteile von XSL in Sitecore anstelle von C#?
- 20. Welche Vorteile bietet Powershell anstelle von VBScript?
- 21. Was sind "anstelle von" Auslösern?
- 22. Sammlung, die von ObservableCollection erbt - Was sind die Vorteile?
- 23. Was sind die Vorteile einer aktualisierten sitemap.xml?
- 24. Was sind die Vorteile verwenden Scrapyd? doc
- 25. Was sind die Vorteile von QAbstractItemModel gegenüber QStandardItemModel?
- 26. Was sind die Vorteile von Google Fonts gegenüber Cufon?
- 27. Was sind die Vorteile von Emacs Auto-Fill-Modus?
- 28. Was sind die Vorteile von concurrent.futures gegenüber Multiprocessing in Python?
- 29. Was sind die Vorteile bei der Verwendung von Qt?
- 30. Was sind die Vorteile der Verwendung von plpgsql in Postgresql
Fast alle Bücher Erlang sagen wir von Prozessbibliothek wegbleiben sollte, aber ich denke, ets mit nicht viel anders ist. –
"Fast alle Erlang Bücher" ... bedeutet das, zwei von drei? =) – Zed