[erlang-questions] Re: Classification of concurrency patterns

Eric Newhuis enewhuis@REDACTED
Fri May 14 19:22:20 CEST 2010


Brilliant.

On May 14, 2010, at 11:15 AM, Jay Nelson <jay@REDACTED> wrote:

> Joe's list seems to me to address only one general category:  
> parallel computation.  The distinctions in the list may or may not  
> overlap, but they are all computational parallelisms.  Other terms  
> for computational concurrency that come to mind include PubSub and  
> Scatter / Gather (which are variants of some that were already  
> listed).
>
> The supervisor pattern only works with concurrency.  It is an  
> Organizational Pattern rather than a Computational Pattern.
>
> I would add the following types of concurrency as a separate category:
>
> Organizational Concurrency
>   - Supervisor hierarchies
>   - Serial servers (ala gen_server)
>   - Event-driven reactors (spawn on each event)
>   - Process-striped buffers (gen_stream**)
>
> Supervisors detect failure of other processes, therefore they must  
> be implemented using concurrency.  The intelligence of system  
> management is distributed among the supervisors and defines the  
> behavior of the system under stress.
>
> Serial servers are used to isolate state and provide distributed  
> asynchronous access to state (or a computational service) for a  
> series of unrelated clients.  Servers also can be used to impose a  
> serial order on events, or provide distributed rendezvous control.
>
> Event-driven concurrency is used in web servers so that there is no  
> contagion of errors from one client to another.  It also ensures  
> memory leaks are not likely to affect the system since spawned  
> requests are short-lived.  Any system which has variable response  
> time in reaction to events can benefit from concurrency by  
> overlapping computations in time.
>
> **This weekend I will be checking in gen_stream which uses process- 
> striped buffering as a new example of organizational concurrency to  
> provide efficient access to a slow data stream by prefetching the  
> data.  A large piece of data is segmented across processes in a  
> round-robin fashion much like RAID uses striping of disks.
>
> jay
>
>
> ________________________________________________________________
> erlang-questions (at) erlang.org mailing list.
> See http://www.erlang.org/faq.html
> To unsubscribe; mailto:erlang-questions-unsubscribe@REDACTED
>


More information about the erlang-questions mailing list