Was sind die Vorteile von Erlang anstelle von Prozesswörterbüchern innerhalb eines Prozesses?

8

Ich denke, die Verwendung von ets wird immer noch ähnliche Nebenwirkungen hervorrufen.

    
TP. 27.09.2009, 13:07
quelle

4 Antworten

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 wird durch Garbage Collection 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.

    
Christian 27.09.2009, 13:15
quelle
9

Vorteile der ETS gegenüber dem Prozesswörterbuch sind:

  • Andere Prozesse können direkt auf die ETS-Tabelle zugreifen
  • ETS bietet Such- / Matching- / Iterationsmöglichkeiten, während das Prozesswörterbuch nur ein Schlüssel / Wert-Speicher ist.
  • Sie können Tabellen in einem Schritt in Dateien speichern / laden
  • Wenn Ihr Eigentümerprozess stirbt, kann die Tabelle von jemand anderem geerbt werden, so dass die Daten nicht verloren gehen.
Zed 27.09.2009 13:12
quelle
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 übereinstimmen.

Das Prozesswörterbuch ist wie nichts anderes in Erlang und das Hinzufügen 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.

    
rvirding 27.09.2009 16:27
quelle
2

Zweifellos hat ETS viel mehr Funktionalität und ist anspruchsvoller. Aber ...

  • Da die Aktualisierungs- / Suchoperationen des Prozesswörterbuchs nur die Referenzen und nicht die gesamten Daten verschieben (siehe die genaue Antwort von Christian), kann es viel schneller sein, besonders bei großen 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 auf den proc.dict eines anderen Prozesses wie

    zugreifen
      

    process_info (whereis (net_kernel), Wörterbuch).

tzp 22.03.2012 09:32
quelle

Tags und Links