【问题标题】:What are the use cases for TPL Dataflow over Reactive Extensions (Rx)TPL Dataflow over Reactive Extensions (Rx) 的用例是什么
【发布时间】:2012-03-18 06:12:43
【问题描述】:

我正在专门研究以一种或另一种方式编写一些信号处理算法,或者可能是这两者的某种组合。

性能不是一个大问题,表达意图的清晰性更重要。

我希望实现以下“块”并组合它们:

  • 滤波器(FIR 和 IIR)
  • 相位检测器
  • 集成商
  • 搅拌机
  • 函数生成器
  • PLL(使用上述作为构建块)

我知道 Rx 可以被视为“Linq-to-streams”,而 TPL 是对并发性的抽象。 我还了解到 Rx 在内部使用 TPL 来管理其异步位,并且 TPL 数据流为 TPL 添加了可组合性。

所以两者都是异步的,都是可组合的,都是相当高级的(Rx moreso)。 应该在哪里使用它们,一般情况下和我上面的信号处理项目中?

【问题讨论】:

  • @Paul R 感谢您的编辑,没注意到!
  • @Overflow 你确定了一个方法吗?你能告诉我们它是什么吗?
  • 我会同时使用这两个。 TPL Dataflow 作为我的基本构建块,Rx 作为块内的实现。我希望这将实现我的可组合性和可读性实现的目标。

标签: task-parallel-library signal-processing system.reactive dataflow tpl-dataflow


【解决方案1】:

这取决于您处理的是哪种原语 - 如果您使用放大类型来推送数据,Rx 和 TPL 会更丰富,但如果您处理的是单个样本(例如 IObservable<byte> , ISourceBlock<float> 等)处理起来可能很乏味。

最近实现了函数发生器、FFT、功率谱量化器等,我从 Rx 开始(这不是 TPL 擅长的并发/并行的情况),但发现我花了更多时间来尝试实现它在 Rx 模型中工作 - 我最终选择了System.Stream

它对我来说效果很好,并且令人惊讶地可组合。但是,性能和避免 GC 是我的首选,所以如果你也不介意,我建议你使用 Rx——你可以用响应式组合器做一些非常酷的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多