Pennant的日常
分享工作上的点点滴滴

2.3并发

      并发是涉及一系列策略和机制的术语,这些策略和机制能使一个或多个线程或者进程同时执行它们的服务处理任务。许多网络化应用程序,尤其是服务器,必须并发地处理从多个客户机来的请求。

      现代操作系统通过提供多线程的并发机制克服了单线程的进程的局限,此机制支持多个进程的创建,并且每个进程都可以包含有多个并发的线程。在这些操作系统中,在硬件保护的地址空间内,进程作为保护和资源分配单元,线程作为执行单元。有以下优点:

      1)它们使用硬件和软件平台的并行处理能力,透明地提高性能。

      2)它们允许编程人员重叠计算和通信服务处理,明显地提高性能。

      3)它们通过在一个应用程序中用独立的线程与不同的服务处理任务相关联,为交互式应用(如GUI)改进可察觉的响应时间。

      4)它们通过使用同步编程抽象(如双向方法调用)允许多个服务处理任务独立地运行,从而简化应用程序设计。

 

      并发应用程序开发的固有的复杂性:

      1)在并发应用程序中,确定一个有效的应用程序并发性体系结构,此结构最小化并发应用程序的语境交换、同步、数据复制/移动开销。

      2)在不降低执行效率的情况下,设计包含同步和异步服务处理任务的复杂的并发系统以简化编程。

      3)选择合适的同步原语,使多处理机的并发应用程序提高性能,防止资源浪费,减少维护费用。

      4)在并发或者实时应用程序中消除不必要的线程和加锁,在不危及正确性,招致死锁或者过度地阻塞应用程序处理的情况下,增强性能或者简化资源管理。

      这些模式为组件,子系统和整个应用程序定义了各种类型的并发体系结构。包括有活动对象(Active Object)、监视器对象(Monitor Object)、半同步/半异步(Half-Sync/Half-Async),领导者/追随者(Leader/Follower)和线程特定的存储器(Thread-Specific Storage)。

 

2.4同步

      并发运行的线程能够同时访问同一对象或变量,从而可能破坏了它们的内部状态。为了防止这个问题,在对象或者函数中不应同时执行的代码可以在临界区(critical section)范围内被同步。

      在面向对象的程序中实现临界区的常用方法是把某种类型的加锁对象硬编码到一个类或者组件。例如,一个互斥(mutual exclusion, mutex)对象是一种必须串行地获取和释放的锁。

      使用低层操作系统API编写这些加锁技术有两个缺点:

      1)容易出错。要在进入临界区之前显式地获取一个锁,并且在退出临界区时显式地释放它,这相当困难。

      2)不灵活和效率低。依赖于应用程序运行的语境,性能需求会将不同的加锁类型用于实现临界区。然而,如果加锁原语在使用的每个地方都被硬编码到软件,那么改变原语完全没有必要如此困难且耗费时间。

      这些模式能减轻上述的问题,以简化并行系统中的串行化和加锁。这些模式是定界加锁(Scoped Locking)、策略化加锁(Strategized Locking)、线程安全接口(Thread-Safe Interface)和双检查加锁优化(Double-Checked Locking Optimization)。

 

2.5网络化软件的其他难题

      依赖性(dependability)。采用网络化体系结构的一个原因是提高可靠性(reliability)和防止单点失效。但网络化应用程序常常需要大量的工作,才能获得与独立应用程序所提供的相同的可靠性。

      有以下几个改进应用程序依赖性的技术:

      1)重新激活(reactivation)。应用程序和服务可以在监视器守护进程(monitor daemon)的控制下运行,如果服务器意外地终止,那么这些守护进程会检测到并且自动地重新启动服务器。

      2)复制(replication)。应用程序和服务能在遍及网络的,多个方位上的拷贝管理器(replicamanager)的控制下运行。拷贝管理器可以使用“主动复制”连续地更新服务拷贝,或者正好当一个主服务失效时使用“被动复制”。复制框架提供各种各样的监视、成员资格、一致性和消息传送机制来帮助增强应用程序依赖性。

 

      服务命名和位置选择。独立应用程序通常通过对象和函数内存地址标识它们的组成服务,而网络化应用程序需要更精心的机制来命名、定位和选择它们的远程服务。

      分布式对象计算和RPC中间件提供位置代理者(location broker),它允许客户机通过更高级的命名而不是通过它们的低层IP地址和TCP端口号来访问服务。位置代理者通过自动化下列任务来简化网络化系统管理,并且在全网络范围内提供更灵活和动态的服务布局:

      1)名字绑定。这个任务把服务名绑定到当前的主机/进程位置。

      2)服务定位。服务或者资源常常可以通过复制在整个网络的多个位置上运行,以提高可靠性。在这种情况下,应用程序可以使用一个位置代理者以确定哪个服务提供者更适合。

posted on 2012-08-30 09:09  汝熹  阅读(419)  评论(0编辑  收藏  举报