<p>You can create a synchronous messaging system with an asynchronous messaging system. This is done by waiting for an acknowledgement directly after sending a message.</p>

<p>An example for this is the actor model which is able to build a synchronous messaging system like CSP.</p>

<p>But you also can simulate a asynchronous messaging system.
When you use buffers to store the message. So the Receiver can access it when he wants to.</p>

<p>An example for this would be the email system which works with TCP.</p>

<p>In <a href="https://www.google.de/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=1&amp;ved=0CC4QFjAA&amp;url=http://www.vs.inf.ethz.ch/publ/papers/mattern-dc-1996.pdf&amp;ei=ChenUaDSCI7ItAarw4HwBA&amp;usg=AFQjCNGC7_LI5SRij4uxSjgGyvztlbBing&amp;bvm=bv.47244034,d.Yms" rel="nofollow">Synchronous, asynchronous, and causally ordered communications</a> they make the statement that the simulation of both is a well known fact.</p>

<p>In <a href="https://www.google.de/url?sa=t&amp;rct=j&amp;q=&amp;esrc=s&amp;source=web&amp;cd=19&amp;ved=0CFoQFjAIOAo&amp;url=http://www.cypherpunks.to/erights/history/actors/AITR-844.pdf&amp;ei=fx-nUdTwOoTSsgbuzIHgBA&amp;usg=AFQjCNFxoqIs2Uq1qMGYbCFaKd3xq7mHqQ" rel="nofollow">Actors, a model of concurrent computation</a> Agha makees the statement that synchronous messages are always build out of asynchonous messages.</p>

<p><strong>EDIT:</strong>
I changed my original answer, thanks to the comments.
I really thought that Tanenbaum had made a comment on this, but he didn't and since i come from the actor model background i always assume message to be asynchonous even synchronous ones.</p>

CC BY-SA 3.0
2013-05-29T09:15:14.833Z
No it's not. asynchronous = synchronous + buffer processes.
Kai
CC BY-SA 3.0
2013-05-29T10:53:16.683Z
He is Tanenbaum.
beroal
CC BY-SA 3.0
2013-05-29T11:10:15.323Z
Yes, there is a chapter “Communication”, but I can't find anything on the topic. Having a proof would also be nice (Tanenbaum does not write proofs).
beroal
CC BY-SA 3.0
2013-05-29T15:07:02.750Z
@Kai, it depends on exactly what the terms mean. For example, if you combine synchronous message passing with buffers and the buffers preserver message order, then you do not get asynchrony proper (where message order can change in transit). Also, buffers are an additional mechanism. You can implement synchrony in terms of asynchrony by handshaking, which does not (simplifying a bit) need anything else.
Martin Berger
CC BY-SA 3.0
2013-05-30T09:30:49.017Z
I took out my old documents on the actor model and tried to find a proof. But i could not find a formal proof.
But I found multiple statements that say you can simulate synchronous with asynchronous and one which says you can do both.
Raphael Ahrens
CC BY-SA 3.0
2013-05-30T11:35:32.847Z
@RaphaelAhrens Consider $\pi$-calculus. Let $tr(P)$ be the translation function from the synchronous into the asynchronous variant. The key clauses are $tr(\overline{x}\langle \vec{y} \rangle.P) = (\nu a)(\overline{x}\langle a\vec{y} \rangle\ |\  a().tr(P))$ and $tr(x(\vec{y}).P) = x(a\vec{y}).( \overline{a}\langle \rangle\ |\  tr(P))$. To prove full abstraction of this encoding you'd probably need to impose a typing discipline. A variant of this encoding has been studied by Quaglia and Walker in  "On Synchronous and Asynchronous Mobile Processes"
Martin Berger
CC BY-SA 3.0
2013-05-31T02:02:42.213Z
@Martin It depends indeed, also on the definition of asynchrony. The original poster made no restrictions. Buffers can be processes. That's not necessarily a new mechanism. Whether these processes preserve message order depends on how you model the buffer processes, not necessarily the process model itself. (See Chapter 14 of Lynch's book [1].) The distributed computing literature clarified that e.g. in the presence of faults, synchrony can be strictly stronger than asynchrony (Chapter 22 of [1]: http://groups.csail.mit.edu/tds/distalgs.html .)
Kai
CC BY-SA 3.0
2013-05-31T07:09:02.890Z
@Kai I agree, I was speaking sloppily. Expressivity of synchrony using asynchrony depends on minute details of the calculi used. See also Palamidessi's result that asynchronous $\pi$-calculus cannot solve leadership election.
Martin Berger
CC BY-SA 3.0
2013-05-28T09:40:07.387Z
2013-05-30T10:01:25.180Z
2013-05-30T10:01:25.180Z
Raphael Ahrens
<p>I think I remember a claim that asynchronous message passing can be implemented by synchronous message passing but not vice versa. Unfortunately, I don't remember an article name, an author, or even a field. Does this ring a bell, or am I delusional?</p>

<concurrency>
synchronous vs. asynchronous message passing
beroal
# synchronous vs. asynchronous message passing

(Asked by: username_0 on 2013-05-28)

I think I remember a claim that asynchronous message passing can be implemented by synchronous message passing but not vice versa. Unfortunately, I don't remember an article name, an author, or even a field. Does this ring a bell, or am I delusional?

**Tags:** concurrency


---

## 1 answers

### Answer by username_1 on 2013-05-28. Score: 2

You can create a synchronous messaging system with an asynchronous messaging system. This is done by waiting for an acknowledgement directly after sending a message.

An example for this is the actor model which is able to build a synchronous messaging system like CSP.

But you also can simulate a asynchronous messaging system.
When you use buffers to store the message. So the Receiver can access it when he wants to.

An example for this would be the email system which works with TCP.

In [Synchronous, asynchronous, and causally ordered communications](https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC4QFjAA&url=http://www.vs.inf.ethz.ch/publ/papers/mattern-dc-1996.pdf&ei=ChenUaDSCI7ItAarw4HwBA&usg=AFQjCNGC7_LI5SRij4uxSjgGyvztlbBing&bvm=bv.47244034,d.Yms) they make the statement that the simulation of both is a well known fact.

In [Actors, a model of concurrent computation](https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=19&ved=0CFoQFjAIOAo&url=http://www.cypherpunks.to/erights/history/actors/AITR-844.pdf&ei=fx-nUdTwOoTSsgbuzIHgBA&usg=AFQjCNFxoqIs2Uq1qMGYbCFaKd3xq7mHqQ) Agha makees the statement that synchronous messages are always build out of asynchonous messages.

**EDIT:**
I changed my original answer, thanks to the comments.
I really thought that Tanenbaum had made a comment on this, but he didn't and since i come from the actor model background i always assume message to be asynchonous even synchronous ones.

> **Comments:**
> **username_2**: No it's not. asynchronous = synchronous + buffer processes.  
> **username_0**: He is Tanenbaum.  
> **username_0**: Yes, there is a chapter “Communication”, but I can't find anything on the topic. Having a proof would also be nice (Tanenbaum does not write proofs).  
> **username_3**: @username_2, it depends on exactly what the terms mean. For example, if you combine synchronous message passing with buffers and the buffers preserver message order, then you do not get asynchrony proper (where message order can change in transit). Also, buffers are an additional mechanism. You can implement synchrony in terms of asynchrony by handshaking, which does not (simplifying a bit) need anything else.  
> **username_1**: I took out my old documents on the actor model and tried to find a proof. But i could not find a formal proof. But I found multiple statements that say you can simulate synchronous with asynchronous and one which says you can do both.  
> **username_3**: @RaphaelAhrens Consider $\pi$-calculus. Let $tr(P)$ be the translation function from the synchronous into the asynchronous variant. The key clauses are $tr(\overline{x}\langle \vec{y} \rangle.P) = (\nu a)(\overline{x}\langle a\vec{y} \rangle\ |\  a().tr(P))$ and $tr(x(\vec{y}).P) = x(a\vec{y}).( \overline{a}\langle \rangle\ |\  tr(P))$. To prove full abstraction of this encoding you'd probably need to impose a typing discipline. A variant of this encoding has been studied by Quaglia and Walker in  "On Synchronous and Asynchronous Mobile Processes"  
> **username_2**: @Martin It depends indeed, also on the definition of asynchrony. The original poster made no restrictions. Buffers can be processes. That's not necessarily a new mechanism. Whether these processes preserve message order depends on how you model the buffer processes, not necessarily the process model itself. (See Chapter 14 of Lynch's book [1].) The distributed computing literature clarified that e.g. in the presence of faults, synchrony can be strictly stronger than asynchrony (Chapter 22 of [1]: http://groups.csail.mit.edu/tds/distalgs.html .)  
> **username_3**: @username_2 I agree, I was speaking sloppily. Expressivity of synchrony using asynchrony depends on minute details of the calculi used. See also Palamidessi's result that asynchronous $\pi$-calculus cannot solve leadership election.  

---

