<div dir="ltr">Very Nice<div><br></div><div>More like this please.<br><div class="gmail_extra"><br></div><div class="gmail_extra">/Joe<br><br><div class="gmail_quote">On Wed, Feb 19, 2014 at 11:08 PM, Dmitry Kolesnikov <span dir="ltr"><<a href="mailto:dmkolesnikov@gmail.com" target="_blank">dmkolesnikov@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
Long time ago, I was looking into async message queue patters.<br>
I found namomsg tutorial is very nice it depicts most common patterns<br>
<a href="http://tim.dysinger.net/posts/2013-09-16-getting-started-with-nanomsg.html" target="_blank">http://tim.dysinger.net/posts/2013-09-16-getting-started-with-nanomsg.html</a><br>
<br>
<br>
<br>
Best Regards,<br>
Dmitry<br>
>-|-|-(*><br>
<div><div class="h5"><br>
> On 19 Feb 2014, at 23:14, Joe Armstrong <<a href="mailto:erlang@gmail.com">erlang@gmail.com</a>> wrote:<br>
><br>
><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>
><br>
> At this stage I thought "pity these patterns don't have well-known<br>
> names".<br>
><br>
> What I'd like is to make a catalog of "well-known" concurrency<br>
> patterns.  I'd like to name them, and describe them informally, and<br>
> give the example code in Erlang.<br>
><br>
> For example, here's how I might describe PUB-SUB.<br>
><br>
> == PUB-SUB<br>
><br>
>    - There are a number of named channels<br>
>    - You can post messages to a channel ie Publish the message (the PUB)<br>
>    - You can subscribe to a channel (The SUB)<br>
>    - If you are currently subscribed to a channel you will be sent all messages<br>
>      sent to the channel.<br>
><br>
> A rudimentary version of this is about 25 lines of Erlang. A full<br>
> version with load balancing, removing bottlenecks etc. would be a lot<br>
> longer, but that's not the point. The basic concurrent structure can<br>
> be explained in a few lines and named.<br>
><br>
><br>
> Pipeline is another example: The output of the first process is the<br>
> input to the next process and so on...<br>
><br>
> Now I start having problems.<br>
><br>
> Suppose I want to generalize a regular map.<br>
><br>
> To be precise. Suppose map(F, L) means [F(I) || I <- L]<br>
><br>
> pmap(F, L) is parallel map (easy) all the F(I)'s are computed concurrently.<br>
><br>
> pmap(F, L, Max) behaves like map(F,L) with at most Max F(I)'s computed concurrently.<br>
><br>
> What should this be called? "Pool of workers"<br>
><br>
> There seem to be things with well-known names "Load-balancer" "map-reduce" etc.<br>
><br>
> Then there are things that we know of but that are not named. For<br>
> example my DNS resolver has two DNS names DNS1 and DNS2.  If DNS1 is<br>
> broken the resolver tries DNS2 - what is concurrency pattern called<br>
> (Pool of responders) or what?<br>
><br>
> The other day I suggested that for fault tolerance it was much easier<br>
> to let the client go to multiple machines rather than use an expensive<br>
> load balancer and fail-over system on the server - but there was no<br>
> convenient name to capture this idea.<br>
><br>
> There sees to be no accepted terminology here - so I'd appreciate any<br>
> suggestions you have as to the names of common currency patterns that<br>
> you use together with definitions of what the names mean.<br>
><br>
> Cheers<br>
><br>
> /Joe<br>
><br>
</div></div>> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div></div></div>