Is how distribution "works" specified anywhere?
Luke Gorrie
luke@REDACTED
Mon May 17 17:25:25 CEST 2004
Joe Armstrong <joe@REDACTED> writes:
> Is there any internal documentation that specifies how distribution
> works?
In "on the wire" terms, check out this file in the OTP sources:
erts/emulator/internal_doc/erl_ext_dist.txt
The distribution messages all map simply onto BIFs (SEND, EXIT, etc)
and it's easy to understand.
> How are things organised with remote Pids? is a remote Pid
> distinguishable from a local Pid - if so how?
The PID structure includes a node name.
> If a remote Pid is sent in a message how does the destination
> machine know that it is a remote Pid?
>
> Given an expression:
>
> Pid ! Message
>
> which software figures out if this is a local message send, or a
> send to a remote machine?
Can you read Emacs Lisp? I have a pretty small and simple erlang
runtime system with distribution in Distel. For example, here is the
`!' bif:
(defun erl-send (who message)
"Send the term MESSAGE to the process WHO.
WHO can be a pid, a registered name (symbol), or a tuple of
\[REGISTERED-NAME NODE]."
(cond ((erl-null-pid-p who)
(erl-lose-msg message))
((erl-local-pid-p who)
(when (erl-local-pid-alive-p who)
(erl-deliver-message who message)))
((erl-remote-pid-p who)
(erl-dist-send who message))
((symbolp who)
(let ((proc (erl-whereis who)))
(if proc
(erl-send proc message)
(erl-exit (tuple 'badarg (tuple 'not-registered who))))))
((tuplep who) ; [tuple NAME NODE]
(erl-dist-reg-send (tuple-elt who 2) (tuple-elt who 1) message))
(t
(error "Bad pid: %S" who))))
Cheers,
Luke
More information about the erlang-questions
mailing list