TPL数据流优于反应性扩展(Rx)的用例有哪些

时间:2012-02-28 18:27:49

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

我特别关注在一个或另一个中编写一些信号处理算法,或者两者兼而有之。

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

我想要实现以下'Blocks'并组成它们:

  • 过滤器(FIR和IIR)
  • 相位检测器
  • 集成
  • 调音
  • 函数生成器
  • PLL(使用上面的构建块)

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

因此两者都是异步的,两者都是可组合的,两者都是相当高的水平(Rx更多)。 通常和上面的信号处理项目应该在哪里使用?

1 个答案:

答案 0 :(得分:6)

这取决于你正在处理什么样的原语 - 如果你使用放大类型来推送数据,Rx和TPL会更丰富,但如果你正在处理单个样本(例如{{1} },IObservable<byte>等。使用它可能会很乏味。

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

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