Сохранение данных, когда рабочий процесс умирает, как? - PullRequest
2 голосов
/ 13 ноября 2010

У меня есть рабочие процессы, которым нужны собранные / вычисленные данные в качестве аргументов при запуске.Это необходимо и при повторных запусках.Где я должен положить код инициализации?Внутри начальства init?Или внутри модулей start_link или init?Есть ли в Эрланге лучшие практики, когда дело доходит до этого?

1 Ответ

2 голосов
/ 15 ноября 2010

Если компонент gen_server имеет критическое состояние или состояние, которое не может быть пересчитано / повторно собрано, я обычно избегаю сохранять состояние в самом gen_server.Вместо этого я предпочитаю поддерживать состояние во внешней таблице процессов.Если вы придерживаетесь этого подхода, убедитесь, что таблица ets либо создана внешним процессом (который, как вы уверены, не умрет), например, процесс приложения - или - создайте таблицу ets в методе initgen_server и используйте метод "ets: give_away / 3", чтобы передать его внешнему процессу (конечно, вам нужно проверить, создана ли таблица в методе init gen_server). В противном случае таблица ets будет уничтожена.когда процесс умирает ..

...