Autobahn A3, exit Duisburg-Wedau at night Siemens press picture, © Siemens AG
The choice of concurrency architecture has a significant impact on the design and performance of multi-threaded software in general, and distributed software in particular. No single concurrency architecture is suitable for all workload conditions and platforms, however. The four concurrency patterns in this chapter therefore address a variety of concurrency problems, ranging from combining asynchronous with synchronous concurrent processing to synchronizing access to shared components, while maximizing performance and throughput.
Software for distributed systems can often benefit from concurrency, in particular servers and server-side software that handles requests from multiple clients simultaneously. In addition, an increasing number of multi-core CPUs and multi-CPU computers are designed to run multiple threads of control in parallel to compensate for the stall in Moore's Law [Sut05a]. Developers of software for distributed systems therefore need to become proficient with process and thread management mechanisms.
A process is a collection of resources, such as virtual memory, I/O handles, and threads of control, that provide the context for executing program instructions. Each process serves as a unit of protection and resource allocation within a hardware-protected address space ...