2009-09-27 7 views

Antwort

12

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.

+1

Fast alle Bücher Erlang sagen wir von Prozessbibliothek wegbleiben sollte, aber ich denke, ets mit nicht viel anders ist. –

+14

"Fast alle Erlang Bücher" ... bedeutet das, zwei von drei? =) – Zed

9

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.
9

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.

+2

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

+1

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

+1

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. –

2

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).

Verwandte Themen