dealing with multiple things happening at the same time in a piece of software

Bill Clementson on Concurrent/Parallel programming (Parallel Processing), esp the use of Domain Specific Language-s. A non-GooGle version of Map Reduce has already been implemented for Nutch (an open-source web Search Engine library), so that is one way some experimenting could be done. However, it's not necessary to look at a direct port of Map Reduce in order to play around with the ideas underlying it. Conceptually, the approach is similar (at least in some respects) to "BlackboardSystem-s".

Concurrent computing is related to parallel computing (Parallel Processing), but focuses more on the interactions between tasks.

In some concurrent computing systems communication between the concurrent components is hidden from the programmer (e.g., by using futures), while in others it must be handled explicitly. Explicit communication can be divided into two classes: (see this on "futures")

On Network Server designs:

  • iterative server; each client request is completely processed before moving on to the next client. (ASynch)

  • concurrent server with fork, one process per client (MultiProcess)

  • concurrent server with threads. one thread per client (Multi Threaded)

  • server using select

  • Pre-Forking server - create a pool of child processes (MultiProcess) at startup, one process from the pool handles each client

  • Pre Threading - create a pool of threads (Multi Threaded) at startup, one thread from the pool handles each client

This presents several problems that need to be solved. [This]( Design.htm) article addresses three of those issues: allowing multiple clients to connect and stay connnected, efficient use of resources, and keeping the server responsive to each of the clients. It is excerpted from chapter five of the book The Definitive Guide to Linux Networking Programming, written by KeirDavis et. al. (Apress, 2004; ISBN:1590593227).

Edited:    |       |    Search Twitter for discussion