我特别关注在一个或另一个中编写一些信号处理算法,或者两者兼而有之。
表现不是一个大问题,表达意图的清晰度更重要。
我想要实现以下'Blocks'并组成它们:
我认为Rx可以被认为是'Linq-to-streams',而TPL是对并发的抽象。 我还得到Rx在内部使用TPL来管理其异步位,并且TPL数据流为TPL增加了可组合性。
因此两者都是异步的,两者都是可组合的,两者都是相当高的水平(Rx更多)。 通常和上面的信号处理项目应该在哪里使用?
答案 0 :(得分:6)
这取决于你正在处理什么样的原语 - 如果你使用放大类型来推送数据,Rx和TPL会更丰富,但如果你正在处理单个样本(例如{{1} },IObservable<byte>
等。使用它可能会很乏味。
最近实现了函数发生器,FFT,功率谱量化器等,我从Rx开始(这不是TPL擅长的并发/并行的情况),但发现我花了更多的时间来尝试制作它在Rx模型中工作 - 我最终选择了ISourceBlock<float>
。
它对我来说效果很好,而且令人惊讶的是可以组合。然而,性能和避免GC是我的首选,所以如果你不介意,我建议Rx - 你可以用反应组合器做一些非常酷的事情。