常见的几种多线程架构

在应用程序中使用多线程处理需精选出具有内在并发性与并行性的架构,有些应用程序天生就适合使用多线程处理的常见架构,三种常见的多线程处理架构:(1)客户机/服务器(2)事件驱动编程(3)黑板。

  1. 客户机/服务器
    客户机/服务器将工作模式分为两个端口,一端(客户机)请求数据或者动作,另一端(服务器)完成该请求。例如,使用一个命名管道连接两个进程时,创建管道的进程通常称为服务器,请求此管道的进程通常称为客户机。在网络环境中一些常用的客户机/服务器模型应用有:(1)文件服务器;(2)数据服务器;(3)事物服务器;(4)应用服务器;(5)逻辑服务器。

    1.1 文件服务器
    文件服务器是客户机/服务器模型最基本应用之一,文件服务器作为共享数据库、文档、多媒体文件等中心仓库,客户机通常是请求使用文件或文件中记录网上的工作站或者终端。常用形式之一就是FTP(File Transfer Protocol,文件传输协议),一般情况下,有一台主机充当文件服务器,允许远程用户登录和执行文件上载或者下载,主机为服务器,远程计算机为客户机,客户机向服务器请求发送或者接收一个或多个文件,服务器要么接收传输的文件,要么传输被请求的文件作为应答。那我们可以想到,如果主机每次只响应一个来自客户机的请求,客户机将处于时间不确定的等待之中,若某个请求需要的处理时间比较长,那么主机则无法响应新的请求,我们可以应用多线程技术,服务器接受请求、创建线程处理请求、等待下一个请求。通常会有多个客户机同时向一个服务器提出请求,因此我们可以让服务器创建单独的线程为每个客户机提供服务。注意,文件服务器不关心信息如何被使用或者需要知道文件中什么特定的信息,它只是简单地接收客户机的请求并发送所请求的文件,客户机则进行文件或记录的余下处理过程。

    1.2  数据服务器和事务服务器
    数据库服务器与文件服务器的区别就是它将完成需求数据或信息的查找,因此它比文件服务器完成的工作要多,通常接收复杂信息查询,需要联合和交叉查找多个数据库,无论是否找到数据,数据服务器只将反应发送给客户机;而客户机则需要构建查询、管理数据项、错误处理及显示结果,通常涉及到GUI,GUI一般使用事件驱动模型来构建,这个模型通常包含消息队列、应用窗口、消息处理器已经事件处理器。
    数据库服务器可以扩展到包含事务服务器,事务是一个动作和更新序列,应用于一个或多个数据库,这些事务要求原子性、一致性、孤立性和持久性,也就是说每个动作或者更新必须完整执行不能被打断,可使用事件互斥量来设计一个事务。

    1.3 应用服务器
    应用服务器用于为多个客户机提供对应用的访问能力,来源于主机-远程端模式的变种。主机-远程端模式是远程端通过通信线路连接到主机并访问运行于主机上的程序,主机囊括所有的处理任务并负责完整执行程序,远程端作为一个输入和显示设备。应用服务器范例将应用工作分配到服务器和客户机上,客户机有自己的处理器并同时执行部分工作,例如基本分布式专家系统,服务器包含知识库、系统状态和推理引擎,客户机包含用户接口处理、解释子系统及知识获取子系统。同样,服务器对每个请求都应当由一个单独的线程来处理,客户机用户接口也应当分配多个线程。

    1.4 逻辑服务器
    逻辑服务器是一种特殊类型的应用服务器,上文介绍的数据库服务器只能返回数据库中显式的信息,而逻辑服务器既能从数据库中查找显式的信息也可以查找隐含的信息,用于需要大量符号计算的问题,比如语音识别、模式识别、图像处理及自然语言处理。逻辑服务器由包含一个或多个内置推理引擎的数据库组成,用于从服务器获取结论和推论,自动推理可以使用深度优先和广度优先搜索图解算法来实现。逻辑服务器也使用客户机/服务器范例来实现,客户机主要负责按适当的格式格式化查询,例如逻辑服务器需要语音激活然后根据格式化的语言激活信号进行相应的推理查询,那客户机则需要有GUI接口和自然语言接口,它将是一个胖客户机,逻辑服务器也总是一个胖服务器。

  2. 事件驱动模型
    事件驱动模型有5个基本组件:事件循环、事件队列、事件、事件处理器和窗口。事件队列从操作系统接收事件,事件循环不断从事件队列中读取事件并将事件分派到适当的窗口,每个窗口有一个相关联的事件处理器,事件处理器为窗口可能接收的每种类型的事件定义了处理方式。通常事件处理器被分为多个程序,而有些程序需要较长的时间处理过程,因此事件驱动模型自然选择多线程处理,第一级多线程分解发生在消息队列以及窗口级别,可以设置每个线程都拥有自己的消息队列、消息处理器和窗口;第二级多线程处理发生在事件处理器中,任何需要长时间处理的事件都应当分配一个单独的线程。比如许多应用程序自动将打印请求、文件排序、文件搜索及其他长时间计算分配给单独的线程,程序员可以为这些事件建立一套分离程序,事件之间很少交互或者没有交互,如果两个进程没有临界区或者公共资源,那么他们就是分离的进程。

  3. 黑板
    黑板架构由两个基本组件构成:黑板数据结构和知识源。下面举个例子说明该架构,我们将一个陌生的外国人说的话翻译成中文,现在有7个语言学方面的知识可以帮助我们进行翻译,我们可以想象7个不同语言学方面的专家:语音学、音位学、语素学、韵律学、语法、语义、语用学。首先我们把外国人说的话写在黑板上,然后每个专家根据他的知识去翻译陌生人讲的话,然后他把翻译的结果也写在黑板上,这样其他专家也能看到相互间的翻译结果,有时候两个专家还会一起合作进行翻译,除了专家以外还需要一个人来主持此次翻译会议,黑板模型里称为控制机制,他将决定哪些结论属于比较正确的结论,最终将正确的结论翻译成中文。写在黑板上的内容就是黑板数据结构,每个语音专家就相当于知识源。黑板模型将每个知识源分配给一个单独的线程,临界区可以受互斥量和条件变量保护,唯一发生的交互就是黑板数据结构。

猜你喜欢

转载自blog.csdn.net/Sandy_WYM_/article/details/83792893