Classification of concurrency patterns

Joe Armstrong erlang@REDACTED
Wed May 12 09:31:00 CEST 2010


I'm interested in trying to classify and name a number of different
parallelization strategies.

We often use expressions like MPC "message passing concurrency" and
SPC "shared state concurrency" this is not what I'm interested in.

I'm interested in classifying and naming the strategies we use to
write parallel code. We could *implement* these strategies using MPC
or SSC.

I've chosen my own names for these below, I have no idea if there are
standard names for these classifications, this is what I've called them:

1) Divide and conquer concurrency
2) Pipeline concurrency
3) Map reduce concurrency
4) Identical Job concurrency
5) Grid concurrency
6) Job queue concurrency

They mean the following:

1) Divide and conquer concurrency

Divide the problem into K jobs which can be performed in parallel.
Perform the jobs
Recombine the results

2) Pipeline concurrency

Divide the problem into K jobs that can be performed in a pipeline.
The output of the first job must be the input of the second and so on.
Run all the steps in parallel

3) Map reduce concurrency

    This is similar to 1). Only the recombination step involves
merging results that
   have the same Key.

4) Identical Job concurrency

    Here the problem does not have to be split into K parts, we
already have N identical
    jobs to do (identical means jobs that will consume similar resources)

   There is no recombination step. There are N results.

5) Grid concurrency

    Divide the problem into N*M identical jobs that can be solved on a
NxM grid of processors.
    Each processor can only talk to its direct neighbors

6) Job queue concurrency

    Divide the problem into a set of named workers (who do jobs). Each
worker has an input
    job queue. Workers consume jobs from their job queues and send the
result to other workers.

    Note:  [1] Paul Morrison calls this flow based programming
               [2] This is AMQP


----


That was my first attempt at naming and classifying these patterns.

I'd be interested to know alternative names for the same things, and
names of systems that employ
the above strategies, and of course missing strategies.

If we could name and classify these things then we could start writing
gen_divide_and_conquer
gen_pipe etc.

/Joe


More information about the erlang-questions mailing list