1. 管道-过滤器架构中过滤器如何通过管道组合,数据转换的粒度与并行性,与责任链/事件流的差异?
请解释管道-过滤器架构,说明过滤器如何通过管道组合,数据转换的粒度与并行性,以及它与责任链/事件流的差异?
- 过滤器(filter)与管道(pipe)的组合
- 数据转换粒度与并行性
- 与责任链/事件流的差异
- 管道-过滤器架构:系统由多个过滤器(filter)组成,过滤器之间通过管道(pipe)连接,数据从源经过管道流经每个过滤器,每个过滤器做一次数据转换(处理 + 输出),串联成一条处理链。每个过滤器是独立的处理单元,输入输出标准化。
- 数据转换粒度与并行性:过滤器粒度决定转换规模(可粗可细),粒度细则复用性好但要更多管道;并行性指多个过滤器可并行处理不同数据(流水线,如 filt1 处理数据 A 时 filt2 处理数据 B),或过滤器内部并行。并行性受"数据依赖"限制,无依赖的过滤器可并行。
- 与责任链/事件流的差异:
- 责任链:每个处理器决定是否处理并/或传给下一个,链是"可中断"的,强调"谁能处理"的决策;管道-过滤器是"每个过滤器都处理所有数据",强调"顺序变换"。
- 事件流:事件流是异步、解耦、按事件分发(发布/订阅),过滤器是无状态、同步、明确的数据流管道;事件流更松散,管道-过滤器更结构化。
管道-过滤器是"数据流式顺序变换",每个过滤器都处理全部数据;责任链是"选择性处理 + 可中断";事件流是"异步解耦 + 事件驱动"。适用场景不同:管道过滤器适合明确的数据处理流水线(如编译器、图像处理)。