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. http://en.wikipedia.org/wiki/Concurrent_programming_language
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")
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
This presents several problems that need to be solved. [This](http://www.cs.rpi.edu/academics/courses/netprog/Server 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: | Tweet this!