[erlang-questions] order-preserving send?
Hans Svensson
hanssv@REDACTED
Thu Aug 28 15:56:39 CEST 2008
Matthias Lang wrote:
> On Wednesday, August 27, atomly wrote:
>> [Bill McKeeman <Bill.McKeeman@REDACTED>]
>>> Simple newbie question. Suppose I have a process id U, and send two
>>> messages
>>>
>>>
>>> U ! Message1.
>>>
>>> U ! Message2.
>>>
>>>
>>> Is there a guarantee that the messages will be received in the order
>>> they were sent?
>> No. There's not even a guarantee that both (or either) messages will be
>> received.
>
> That misleading and, for practical purposes, wrong.
>
>>From the FAQ:
>
> | 10.9 Is the order of message reception guaranteed?
> |
> | Yes, but only within one process.
> |
> | If there is a live process and you send it message A and then message
> | B, it's guaranteed that if message B arrived, message A arrived before
> | it.
> |
That is however not true (in the distributed case), it is possible to
drop A and then later receive B. The paper 'Programming Distributed
Erlang Applications: Pitfalls and Recipes' describes this situation as
well as some other quirks:
http://www.cs.chalmers.se/~hanssv/doc/ew07-dist.pdf
> | On the other hand, imagine processes P, Q and R. P sends message A to
> | Q, and then message B to R. There is no guarantee that A arrives
> | before B. (Distributed Erlang would have a pretty tough time if this
> | was required!)
>
That is actually guaranteed in the local (non-distributed) case, then A
is actually *always* delivered before B. But as mentioned it doesn't
hold in the distributed setting.
> The next question is also relevant:
>
> http://www.erlang.org/faq/academic.html#10.10
>
/Hans
More information about the erlang-questions
mailing list