Motivated by the fact that concurrency, if not used properly and
carefully, result in gigantic overhead and thus performance penalties
compared to single-threaded systems, this tutorials examines how
concurrency can be used effectively. We discuss concurrency issus
at all levels of granularity, beginning from fundamental concurrency
architectures, over desingning and implementing shared objects,
to addressing low-level serialization and synchronization issues.
In particular we present concrete patterns and techniques that let
applications benefit from using multiple threads. Moreover, for
every technique we discuss when it is most feasible, and when it
should not be applied. To illustrate the patterns and techniques,
we use concrete examples from the real-world. The tutorial concludes
with a summary of our experiences in building concurrent systems.
The tutorial covers most patterns of our book: Pattern-Oriented
Software Architecture, Volume 2, Patterns for Concurrent and Networked