A basic check to do is to look at your receive statement.<br><br>If it for example looks like this:<br><br>receive<br>    {c1, Msg} -><br>        do_c1_stuff();<br>    {c2, Msg} -><br>        do_c2_stuff()<br>end<br>
<br>In this case if there are always some messages from C1 in the message queue they will be picked first, regardless of the order. This is called selective receive. If you want to take the messages as they come you should do something like this:
<br><br>receive<br>
    {Sender, Msg} -><br>        case Sender of<br>            c1 -><br>
                do_c1_stuff();<br>            c2 -><br>                do_c2_stuff()<br>        end<br>
end<br><br>This way you will always pick a message, the first one to be in queue (which matches pattern {A, B} of course) and _then_ look at the sender.<br><br>Hope that helps. Here are some useful slides: <a href="http://www.duomark.com/erlang/briefings/euc2006/index.html">
http://www.duomark.com/erlang/briefings/euc2006/index.html</a><br><br>Cheers!<br>Adam<br><br><div class="gmail_quote">On Nov 18, 2007 9:22 PM, Matej Kosik <<a href="mailto:kosik@fiit.stuba.sk">kosik@fiit.stuba.sk</a>> wrote:
<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div class="Ih2E3d">-----BEGIN PGP SIGNED MESSAGE-----<br>Hash: SHA1<br><br></div><div class="Ih2E3d">
KatolaZ wrote:<br>> On Sun, Nov 18, 2007 at 10:55:35AM -0800, Zvi wrote:<br>>> Same processes on the same node?<br>>> Will be this a case when processes are on different nodes?<br>>><br>><br>> If the same process (only one) sends two messages one after the other
<br>> (Msg1 and Ms2, respectively) to another process, then those two<br>> messages are going to be received in the same order as they have been<br>> sent, i.e. Msg1 first and then Msg2. And this does not depend on the
<br>> fact that the two processes are running on different nodes (since I'm<br>> quite sure that message passing among remote nodes is handled using<br>> TCP sockets, so the *order* of transmission should be preserved...)
<br>><br>> Or, at least, I hope it works so ;-)<br><br></div>I hope (but I am not sure) so too. My problems arise from the fact that I did not studied internals<br>of Erlang VM (or I did not studied Erlang formal semantis---I am not sure if there is something like
<br>that).<br><br>In a system I am in charge to write I have observed an anomaly. In this case, there were at least<br>three processes.<br>- - server S<br>- - client C1<br>- - client C2<br><br>The client C1 sends messages to server S "intensively". The client C2 sends messages to server S
<br>occassionally. It is desirable that messages from C2 will be handled (in a finite time). But I have<br>observed the opossite situation. As if the virtual machine did not guaranteed the fairness. Only<br>messages from C1 were received by S. Is something like that possible?
<br><br>(to avoid this situation, I had to decrease the intensity by which client C1 sends messages to<br>server S. Weird.).<br><br>><br>> HND<br>><br>> Enzo<br><div class="Ih2E3d">><br><br><br>- --<br>Matej Kosik
<br>-----BEGIN PGP SIGNATURE-----<br>Version: GnuPG v1.4.6 (GNU/Linux)<br>Comment: Using GnuPG with Mozilla - <a href="http://enigmail.mozdev.org" target="_blank">http://enigmail.mozdev.org</a><br><br></div>iD8DBQFHQJ8aL+CaXfJI/hgRAuxdAJ9NBs/jCJDcrPB6pW6DEX+l7LUOQgCgg7u8
<br>NAsPd9pNZ6OWMvCw9kufOjo=<br>=Zuq+<br>-----END PGP SIGNATURE-----<br><div><div></div><div class="Wj3C7c">_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">
erlang-questions@erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br></div></div></blockquote></div><br>