2 Stimmen

Wie bleiben Daten erhalten, wenn ein Arbeitsprozess stirbt?

Ich habe Arbeitsprozesse, die beim Starten gesammelte/berechnete Daten als Argumente benötigen. Diese werden dann auch bei Neustarts benötigt. Wo sollte ich den Initialisierungscode unterbringen? Innerhalb des Supervisors init? Oder in den Modulen start_link oder init? Gibt es in Erlang irgendwelche Best Practices, wenn es um dieses Thema geht?

2voto

arun_suresh Punkte 2847

Wenn die Komponente gen_server einen kritischen Zustand hat oder einen Zustand, der nicht neu berechnet/gesammelt werden kann, vermeide ich es im Allgemeinen, den Zustand in gen_server selbst zu speichern. Ich entscheide mich stattdessen dafür, den Status in einer externen Prozess-/Etz-Tabelle zu speichern. Wenn Sie sich für diesen Ansatz entscheiden, stellen Sie sicher, dass die ets-Tabelle entweder von einem externen Prozess erstellt wird (von dem Sie sicher sind, dass er nicht stirbt), z. B. dem Anwendungsprozess, oder erstellen Sie die ets-Tabelle in der init-Methode des gen_server und verwenden Sie die "ets:give_away/3"-Methode, um sie an einen externen Prozess zu übergeben (natürlich müssen Sie prüfen, ob die Tabelle bereits in der init-Methode des gen_server erstellt wurde). Andernfalls wird die ets-Tabelle zerstört, wenn der Prozess stirbt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X