zoukankan      html  css  js  c++  java
  • 管道一过滤器架构个人经验

    在管道-过滤器架构模式中,每个构件都有一组输入,输出,构件读取输入的数据流,经过内部处理后,产生输出数据流,该过程主要完成输入流的变换及增量计算。这里的构件就是过滤器,而连接过滤器的就是管道,这个管道将上一个过滤器处理的结果数据流传送到下一个过滤器,在进行其他的计算。

      简单来说,管道-过滤器模式结构就像是一条产品加工流水线,原材料在流水线上经过一个个工人的加工,最终生产出产品。这里的工人就是过滤器,将材料进行加工,流水线中的传送带就是管道,将一个工人加工过得材料传送给下一个工人继续加工。

    应用场景1.由一个应用程序所需的处理可以很容易地被分解成一组离散的,独立的步骤。2.由应用程序执行的处理步骤具有不同的可扩展性要求。

    优势是(1)使得构件具有良好的隐蔽性和高内聚、低耦合的特点;(2)允许设计者将整个系统的输入/输出行为看成是多个过滤器的行为的简单合成;(3)支持软件重用。重要提供适合在两个过滤器之间传送的数据,任何两个过滤器都可被连接起来(4)系统维护和增强系统性能简单。新的过滤器可以添加到现有系统中来;旧的可以被改进的过滤器替换掉;(5)允许对一些如吞吐量、死锁等属性的分析;(6)支持并行执行。每个过滤器是作为一个单独的任务完成,因此可与其它任务并行执行;

    然后说一些案例:

    输入:源程序
      预处理:负责宏展开和去掉注释等工作。
      编译:进行词法分析、语法分析、语义分析、代码优化和代码产生。
      汇编:负责把汇编代码转换成机器指令,生成目标文件。
      链接:负责把多个目标文件、静态库和共享库链接成可执行文件/共享库。
      输出:可执行文件/共享库。

    下面说一下 管道以及过滤器的组成以及优缺点

    管道-过滤器的组成

    1 过滤器

    过滤器按照对流经它的数据操作的不同,可分为3类过滤器:输入过滤器,处理过滤器和输出过滤器。下面将对这三类过滤器进行介绍。

    (1)输入过滤器

    输入过滤器处在问题所在的外部世界与软件系统的边界处,是系统数据流的源点。它负责接收外界信息并转化为系统所需的数据流。

    (2)处理过滤器

    处理过滤器是系统内变换数据流的部件,它有一个入口和一个出口,数据经入口流入,经过处理过滤器内部处理之后从出口流出。

    (3)输出过滤器

    从建立完备的,首尾一致的可重用的软件部件组的角度出发,正如输入过滤器是系统数据流的起点,那么输出过滤器是数据流的终点。

    过滤器的实现还须满足以下三条基本原理:

    随后的处理单元从过滤器中拉出输出数据;

    前面的处理单元把新的输入数据压入过滤器;

    过滤器以循环工作的方式,从流水线中拉出其输入数据并且将其输出数据压入流水线。过滤器按照以上三种情况可分为两类:主动过滤器和被动过滤器。满足前两种情况的过滤器称为被动过滤器,满足最后一种情况的过滤器称为主动过滤器。

    2 管道

    管道作为过滤器之间数据流动的通道的软件部件,它的主要功能是连接各个过滤器,充当过滤器之间数据流的通道。管道具有数据缓冲以及提高过滤器之间的并行性操作的作用。管道由数据缓冲区,向数据缓冲区读和写数据,判断管道为空或已满等操作定义组成

    管道/过滤器模式的优点如下。

    (l)体现了各功能模块的“黑盘”特性及高内聚、低耦合的特点。

    (2)可以将整个系统的输入,输出行为看成是多个过滤器行为的简单合成。

    (3)支持软件功能模块的重用。

    (4)便于系统维护:新的过滤器可以添加到现有系统中来,旧的可以由改进的过滤器替换。

    (5)支持某些特定的分析,如吞吐量计算、死锁检测等。

    (6)支持并行操作,每个过滤器可以作为一个单独的任务完成。

    管道,过漶器模式的缺点如下。

    (1)通常导致系统处理过程的成批操作。

    (2)需要设计者协调两个相对独立但又存在关系的数据流。

    (3)可能需要每个过滤器自己完成数据解析和合成工作(如加密和解密),从而导致系统性能下降,并增加了过滤器具体实现的复杂性。

    引用:https://www.cnblogs.com/Zhanghaonihao/p/9097034.html

    https://www.cnblogs.com/maosonglin/p/9306163.html

  • 相关阅读:
    2018 ACM-ICPC World Finals Problem D. Gem Island(递推)
    2016-2017 ACM-ICPC Northeastern European Regional Contest Problem C. Cactus Construction(仙人掌+构造)
    JZOJ 6997. 2021.03.06【2021省赛模拟】排列(最小树形图)
    JZOJ 6653. 【2020.05.27省选模拟】树(权值线段树)
    JZOJ 6652. 【2020.05.27省选模拟】序列(贪心+序列翻转)
    JZOJ 6979. 【2021.02.03冬令营模拟】天各一方(DP)
    MyBatisPlus使用Version注解(乐观锁)
    并行库parallelStream设置并行数量
    PHPUnit漏洞复现
    使用云函数隐藏C2服务器
  • 原文地址:https://www.cnblogs.com/xuzhaoyang/p/11000995.html
Copyright © 2011-2022 走看看