Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architectural patterns 管道和过滤器,需要澄清_Architectural Patterns - Fatal编程技术网

Architectural patterns 管道和过滤器,需要澄清

Architectural patterns 管道和过滤器,需要澄清,architectural-patterns,Architectural Patterns,关于管道和过滤器的几个问题 在本例中,如上图所示,实施时: 每根管道是否应在单独的螺纹中运行 每个筛选器是否应在单独的线程中运行 公平地说,水泵只“知道”它看到的第一根管道,而对世界其他地方一无所知吗?此外,公平地说,每个组件只“知道”一个之前和一个之后的组件吗 换句话说,过滤器将检查是否有数据可供其拾取和处理,然后仅检查1。处理它和2。将其传递到下一个管道?管道和过滤器是divide et impera的一个应用程序,它使用模块化,旨在通过配置所涉及的模块实现易于实现和多功能性 它在解决涉及

关于管道和过滤器的几个问题

在本例中,如上图所示,实施时:

  • 每根管道是否应在单独的螺纹中运行
  • 每个筛选器是否应在单独的线程中运行
  • 公平地说,水泵只“知道”它看到的第一根管道,而对世界其他地方一无所知吗?此外,公平地说,每个组件只“知道”一个之前和一个之后的组件吗

  • 换句话说,过滤器将检查是否有数据可供其拾取和处理,然后仅检查1。处理它和2。将其传递到下一个管道?

    管道和过滤器是divide et impera的一个应用程序,它使用模块化,旨在通过配置所涉及的模块实现易于实现和多功能性

    它在解决涉及源流、对象或信号的多个处理运行,并请求生成相同类型的修改流、对象或信号的问题时最有用

    它基于称为过滤器的简单小型处理单元,所有这些处理单元都遵循相同的约定(它们在输入中获得相同的对象/流类型和可选参数,并返回已处理的流/对象)。每个过滤器输入可以连接到(另一个或自身的另一个实例)过滤器输出,或连接到源(称为泵),类似地,每个过滤器输出可以连接到过滤器输入或架构返回对象/蒸汽(称为接收器)。连接单元称为管道,由管理器类使用,通过过滤器中完成的不同处理步骤来路由流/对象/信号

    在指定契约时,每个过滤器都可以自主操作,而不需要了解其他过滤器或整个流程处理。这意味着过滤器也可以透明地交换,产生不同的最终结果

    虽然过滤器实例可以在不同的流上同时运行,但管道和过滤器模式通常不用于并发操作,因为每个过滤器大多需要访问相同的资源

    • 软件示例:图像处理中的过滤器
    • 真实世界的例子:踏板效果处理吉他和放大器之间的声音信号

    过滤器实际上对彼此一无所知,只是它们都有相同的约定(调用和返回),因此它们可以透明地交换(主要是将不同的结果对象传递到接收器)。@guido关于互换性的观点非常好。请回答这个问题,而不是发表评论,这样我可以正确地回答你