preservation of message order

Ulf Wiger <>
Wed Jan 29 16:43:25 CET 2003

On Wed, 29 Jan 2003, Richard Carlsson wrote:

>On Tue, 28 Jan 2003, Ulf Wiger wrote:
>> Erlang guarantees that the order of messages from one sender
>> to another is preserved.
>> Does this also mean that a {'DOWN',process,Who,Why} message,
>> or an {'EXIT',Pid,Why} message can never reach the recipient
>> ahead of the last message sent to same recipient? I hope so.
>All signals have this ordering guarantee. Messages are just
>a subset of "signals", and so are Exit signals. (There are
>other, more obscure signals also, e.g. link requests, which
>the user never sees directly.) So if the originating
>process is the same, the ordering is guaranteed regardless
>of the type of signal. (All of this according to the Erlang
>reference manual by Barklund/Virding.)

Of course. Thank you. I have the specification in my
bookshelf (doesn't everyone?), but it didn't occur to me to
look there. (:

>> There are probably restrictions, such as: if the message
>> is sent using global:send(...), no such guarantee can be
>> made, but if the message is sent using the Pid or
>> locally registered name of the process, the guarantee should
>> hold.
>In fact, even if you use global:send/2, the message is
>still dispatched directly by the calling process (after
>doing a lookup) so it should not lose the ordering

Right again. I was thinking about the
global:safe_whereis_name/1 semantics, but I see now that
this is not even a documented function. Still, since the
'global' reference manual doesn't specify what exactly goes
on in global:send/2, I wouldn't presume that it guarantees
ordering (even if the current _implementation_ does.)

Ulf Wiger, Senior Specialist,
   / / /   Architecture & Design of Carrier-Class Software
  / / /    Strategic Product & System Management
 / / /     Ericsson Telecom AB, ATM Multiservice Networks

More information about the erlang-questions mailing list