4

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

在此处输入图像描述

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

  1. 每个管道是否应该在单独的线程中运行?
  2. 每个过滤器是否应该在单独的线程中运行?
  3. 公平地说,Pump 只“知道”它看到的第一个 Pipe 而对世界其他地方一无所知吗?此外,是否可以公平地说每个组件“只知道”一个前后一个组件?

换句话说,过滤器将检查是否有数据准备好供其提取和处理,然后只有 1. 处理它,然后 2. 将其传递给下一个管道?

4

1 回答 1

5

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

当解决涉及源流或对象或信号的多次处理运行的问题时,它发现最有用,并要求产生相同类型的修改流或对象或信号。

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

指定合同的交易是每个过滤器可以自主行动,而无需对其他过滤器或整个流程处理一无所知。这意味着过滤器也可以透明地互换,产生不同的最终结果。

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

  • 软件示例:图像处理中的过滤器
  • 现实世界的例子:踏板效果器处理吉他和放大器之间的声音信号。
于 2012-01-29T04:46:28.250 回答