我们的分布式计算模式语言包含了4个模式,实践表明这些模式可以帮助我们创建多种并发架构和解决各种设计问题。它们是:
? HALF-SYNC/HALF-ASYNC模式(359)[POSA2]解耦合并发系统中的异步和同步服务处理以简化编程,而不会过度地影响性能。该模式引入两个相互通信的层,一个用于异步服务处理,另一个用于同步服务处理。
? LEADER/FOLLOWERS模式(362)[POSA2]提供了一个高效的并发模型,在该模型中多个线程轮流使用一套事件源,来检测、分离、分派和处理事件源中出现的服务请求。
? ACTIVE OBJECT模式(365)[POSA2]通过将服务请求和服务执行解耦合来提高并发性,它将对象化的服务请求放到自己的控制线程中,并简化了对它们的访问。
? MONITOR OBJECT模式(368)[POSA2]通过同步并发方法的执行来保证同一时刻一个对象中只有一个方法在运行。它允许一个对象的多个方法以协作的方式确定执行时刻表。
本章的范围仅限于开发分布式系统并发通信的中间件和应用程序组件。我们的目的并非要覆盖与并发相关的所有方面。我们把主要的关注点放在几个关键的模式上面。这些模式定义了如何构造(structure)和分割(partition)并发软件——从而形成多个协作的线程,以及如何组织对由多个线程共享的组件的访问。如今在理论上和实践上已经存在很多成功的并发模型,但是这里我们有意没有作以笼统地、指导性地展示,因为这并非本章的目的所在。
有关线程同步技术的模式也没有包括在本章,而是在第16章——同步中。 虽然THREAD-SPECIFIC STORAGE模式在[POSA2]中归类为并发模式,多年的使用经验告诉我们它更多的是关于如何避免加锁成本——而不是并发,因此我们把它也归到了同步这一章。
MONITOR OBJECT归于并发模式还是同步模式也有些争议。我们把它放到了这一章,因为其主要的目的是在面向对象编程中应用并发:它也使用了互斥、条件变量等同步机制,但是相对来说并非其主要特点。值得指出的是MONITOR OBJECT是ACTIVE OBJECT的补充。
本章中的模式分为两组:并发基础设施和访问同步。
HALF-SYNC/HALF-ASYNC和LEADER/FOLLOWERS定义了高层并发架构。HALF-SYNC/HALF-ASYNC解耦合并发系统中的异步和同步处理以简化编程,而不会过度影响操作系统和网络层次的性能。由于其编程模型简单,HALF-SYNC/HALF-ASYNC被用于多种并发应用,包括操作系统、中间件、工业流程控制和通信应用[POSA2]。LEADER/FOLLOWERS为事件驱动系统提供了并发模型。它尤其适用于处理短暂的(short-duration)、原子的并且反复的动作中的事件,比如接收和分发网络事件或者向数据库中存储大量数据记录。
展示了HALF-SYNC/HALF-ASYNC和LEADER/FOLLOWERS是如何与我们的模式语言集成在一起并应用于分布式计算的。
ACTIVE OBJECT和MONITOR OBJECT模式可以对对象和组件上并发调用的函数进行同步和调度。其主要区别是ACTIVE OBJECT的方法是在与其客户端不同的线程中执行,而MONITOR OBJECT的方法则在其客户端线程中执行。所以ACTIVE OBJECT可以执行更为复杂——尽管代价很大——的调度,来确定其方法的执行顺序。ACTIVE OBJECT主要用于在大的组件和子系统中支持并发,而MONITOR OBJECT则主要用于实现较小的并发对象。
展示了ACTIVE OBJECT和MONITOR OBJECT是如何与我们的模式语言集成在一起并应用于分布式计算的。
15.1 Half-Sync/Half-Async **
在开发并发软件,尤其是并发ENCAPSULATED IMPLEMENTATION(313)或者应用了REACTOR(259)或PROACTOR(262)作为事件处理基础设施的网络服务器时…
…我们需要在确保对并发机制的应用能够简化编程的同时,还要保证性能上的高效和可伸缩性。