2011-02-27 8 views
6

He estado investigando agentes móviles y me preguntaba si es posible enviar un proceso en ejecución a otro nodo en erlang. Sé que es posible enviar un mensaje a otro nodo. Sé que es posible cargar un módulo en todos los nodos de un clúster. ¿Es posible mover un proceso que podría estar en algún estado en un nodo particular a otro nodo y reanudar su estado? Es decir, ¿erlang proporciona una fuerte movilidad? ¿O es posible proporcionar una gran movilidad en erlang?En Erlang, ¿es posible enviar un proceso en ejecución a un nodo diferente?

Respuesta

10

Sí, es posible, pero no hay una llamada "Mover proceso a nodo". Sin embargo, si el proceso se construye con una característica para la migración, puede hacerlo enviando la función del proceso y su estado a otro nodo y organizar un spawn allí. Para obtener la identidad del proceso correcta, necesitará usar el registro de proceso global o gproc, ya que el proceso cambiará pid.

También hay otras consideraciones: El proceso podría estar utilizando una tabla ETS cuyos datos no están presentes en el otro nodo, o puede haber almacenado cosas en el diccionario de proceso (viene a la mente el estado del módulo aleatorio).


El consenso general en Erlang es que los procesos no se movilizan para moverse entre las máquinas. Por el contrario, uno organiza una toma de posesión de las aplicaciones entre nodos si un nodo muere. O para la distribución del sistema, por lo que los datos ya están distribuidos en otra máquina. En cualquier caso, el problema principal de hacer que el estado sea persistente en caso de errores aún se mantienen, movilidad o no, y la distribución es una buena herramienta para resolver el problema de persistencia.

Cuestiones relacionadas