<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Feb 19, 2014 at 10:41 PM, Loïc Hoguin <span dir="ltr"><<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>On 02/19/2014 10:14 PM, Joe Armstrong wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
<br>
Hello, I'm giving a course in distributed and parallel programming in<br>
Erlang ...<br>
<br>
Next week I'll be talking about common concurrency patterns, I was<br>
talking with the course adviser, and I rattled off the names of a few<br>
concurrency patterns that were well-known and easy to explain. I said<br>
I'll do PUB-SUB, pipeline, map-reduce, parallel map, and so on.<br>
<br>
At this stage the course adviser said that a) things like PUB-SUB<br>
would not be familiar to the students and that b) It would take more<br>
than 5-10 minutes to explain PUB_SUB.<br>
</blockquote>
<br></div>
Your course adviser lacks imagination. It takes a few seconds to explain PUB-SUB. These things are PUB-SUB:<br>
<br>
 *  Twitter<br>
 *  Facebook<br>
 *  Mailing lists<br>
 *  IRC channel / group chat<br>
 *  Newsletter<br></blockquote><div><br></div><div>The idea is simple - but it could take *hours* to discuss possible implementations.</div><div>Umm  - are message eventually delivered in order? what happens during a failure etc. Do we make</div>

<div>a log tree of publishers ... etc.</div><div><br></div><div>my 5-10 minutes was for idea + simple code</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">


<br>
Most of these patterns can be explained with a fairly simple drawing.<br>
<br>
pipeline: data -> intermediary -> result<br>
<br>
map-reduce (I simplified, I'm no good at this ASCII stuff):<br>
<br>
data -> intermediary -\<br>
data -> intermediary ---> result<br>
data -> intermediary -/<br>
<br>
And so on.<br>
<br>
A good drawing and a few known examples are worth a million words.<br></blockquote><div><br></div><div>Now that's trolling - what about Maxwell's equations? All of electrodynamics in</div><div>four  equations </div>
<div><br></div><div>This is fun:</div><div><br></div><div><a href="https://en.wikipedia.org/wiki/Deferent_and_epicycle">https://en.wikipedia.org/wiki/Deferent_and_epicycle</a><br></div><div><br></div><div>Ptolemy and his mates thought the planets moved in epicyles, they make wonderful drawings</div>
<div>of this, and gave examples - trouble was they were all wrong. Good old Kepler put them</div><div>right with a few equations.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br>
I would be interested to hear what name people suggest, but I'm afraid there's about as many concurrency patterns as there are possible combinations.<br></blockquote><div><br></div><div>Yes - but names like gen_server supervisor, gen_fsm are useful to express designs (to people who know</div>

<div>OTP) but we need more well know names</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br>
I suggest calling the DNS pattern Howard and the load balancer-replacement pattern Clementine.<span><font color="#888888"><br>
<br></font></span></blockquote><div><br></div><div>?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<span><font color="#888888">
-- <br>
Loïc Hoguin<br>
<a href="http://ninenines.eu" target="_blank">http://ninenines.eu</a><br>
</font></span></blockquote></div><br></div></div>