Можно ли в Erlang отправить запущенный процесс на другой узел? - PullRequest
6 голосов
/ 27 февраля 2011

Я изучал мобильные агенты, и мне было интересно, можно ли отправить запущенный процесс на другой узел в erlang.Я знаю, что можно отправить процессу на другой узел сообщение.Я знаю, что можно загрузить модуль на всех узлах в кластере.Можно ли переместить процесс, который может находиться в каком-то состоянии на определенном узле, на другой узел и возобновить его состояние.То есть, обеспечивает ли Erlang сильную мобильность?Или возможно ли обеспечить сильную мобильность в эрланге?

1 Ответ

10 голосов
/ 27 февраля 2011

Да, это возможно, но нет вызова "Переместить процесс в узел". Однако, если процесс построен с возможностью миграции, вы, безусловно, можете сделать это, отправив функцию процесса и его состояние другому узлу и организуйте там порождение. Чтобы правильно идентифицировать процесс, вам потребуется использовать глобальный реестр процессов или gproc, так как процесс изменится pid .

Есть и другие соображения: процесс может использовать таблицу ETS, данные которой отсутствуют на другом узле, или он может хранить данные в словаре процесса (вспоминается состояние из случайного модуля).


Общий консенсус в Erlang заключается в том, что процессы не мобилизованы для перемещения между машинами. Скорее, либо организуется захват приложений между узлами в случае смерти узла. Или для распространения системы, чтобы данные уже распространялись на другую машину. В любом случае, основная проблема сохранения состояния в случае, если ошибки все еще сохраняются, мобильность или нет, а распределение - хороший инструмент для решения проблемы постоянства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...