反应式扩展(Rx)上的TPL数据流的用例是什么



我特别想用其中一种或另一种,或者两者的组合来编写一些信号处理算法。

绩效不是什么大问题,表达意图的清晰性更重要。

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

  • 滤波器(FIR和IIR)
  • 相位检测器
  • 集成商
  • 混合器
  • 函数生成器
  • PLL(使用以上内容作为构建块)

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

所以两者都是异步的,都是可组合的,都非常高级(Rx-moreso)。在一般情况下以及在我上面的信号处理项目中,每种都应该在哪里使用?

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

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

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

相关内容

  • 没有找到相关文章

最新更新