Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects
Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann
- English
- ePUB (mobile friendly)
- Available on iOS & Android
Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects
Douglas C. Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann
About This Book
Designing application and middleware software to run in concurrent and networked environments is a significant challenge to software developers. The patterns catalogued in this second volume of Pattern-Oriented Software Architectures (POSA) form the basis of a pattern language that addresses issues associated with concurrency and networking.
The book presents 17 interrelated patterns ranging from idioms through architectural designs. They cover core elements of building concurrent and network systems: service access and configuration, event handling, synchronization, and concurrency. All patterns present extensive examples and known uses in multiple programming languages, including C++, C, and Java.
The book can be used to tackle specific software development problems or read from cover to cover to provide a fundamental understanding of the best practices for constructing concurrent and networked applications and middleware.
About the Authors
This book has been written by the award winning team responsible for the first POSA volume "A System of Patterns", joined in this volume by Douglas C. Schmidt from University of California, Irvine (UCI), USA.
Visit our Web Page
Frequently asked questions
Information
Chapter 1
Concurrent and Networked Objects
âWith the exception of music, we have been trained to think of patterns as fixed affairs. Itâs easier and lazier that way, but, of course, all nonsense. The right way to begin to think of the pattern which connects is to think of a dance of interacting parts, pegged down by various sorts of limits.âGregory Bateson â Cultural Anthropologist
- Service access and configuration
- Event handling
- Synchronization and
- Concurrency
1.1 Motivation
- Desktop computer clock speeds will run at ~100 Gigahertz
- Local area network link speeds will run at ~100 Gigabits/second
- Wireless link speeds will run at ~100 Megabits/second and
- The Internet backbone link speeds will run at ~10 Terabits/second
- Inherent and accidental complexities. There are vexing problems with concurrent and networked software that result from inherent and accidental complexities. Inherent complexities arise from fundamental domain challenges, such as dealing with partial failures, distributed deadlock, and end-to-end quality of service (QoS) requirements. As networked systems have grown in scale and functionality they must now cope with a much broader and harder set of these complexities. Accidental complexities arise from limitations with software tools and development techniques, such as non-portable programming APIs and poor distributed debuggers. Ironically, many accidental complexities stem from deliberate choices made by developers who favor low-level languages and tools that scale up poorly when applied to complex concurrent and networked software.
- Inadequate methods and techniques. Popular software analysis methods [SM88] [CY91] [RBPEL91] and design techniques [Boo94] [BRJ98] have focused on constructing single-process, single-threaded applications with âbest-effortâ QoS requirements. The development of high-quality concurrent and networked systemsâparticularly those with stringent QoS requirements, such as videoconferencingâhas been left to the intuition and expertise of skilled software architects and engineers. Moreover, it has been hard to gain experience with concurrent and networked software techniques without spending considerable time learning via trial and error, and wrestling with platform-specific details.
- Continuous re-invention and re-discovery of core concepts and techniques. The software industry has a long history of recreating incompatible solutions to problems that are already solved. For example, there are dozens of non-standard general-purpose and real-time operating systems that manage the same hardware resources. Similarly, there are dozens of incompatible operating system encapsulation libraries that provide slightly different APIs that implement essentially the same features and services. If effort had instead been focused on enhancing and optimizing a small number of solutions, developers of concurrent and networked software would be reaping the benefits available to developers of hardware. These developers innovate rapidly by using and applying common CAD tools and standard instruction sets, buses, and network protocols.
- Define a vocabulary for talking about software development problems [SFJ96] and
- Provide a process for the orderly resolution of these problems [Ale79] [AIS77]
- Re-discovering patterns opportunistically from source code is expensive and time-consuming, because it is hard to separate the essential design decisions from the implementation details.
- If the insights and rationale of experienced designers are not documented, they will be lost over time and thus cannot help guide subsequent software maintenance and enhancement activities.
- Without guidance from earlier work, developers of concurrent and networked software face the Herculean task [SeSch70] of engineering complex systems from the ground up, rather than reusing proven solutions.