TPL 数据流(TDF)和响应式扩展有啥区别?

Posted

技术标签:

【中文标题】TPL 数据流(TDF)和响应式扩展有啥区别?【英文标题】:What are the differences between TPL Dataflow(TDF) and Reactive Extensions?TPL 数据流(TDF)和响应式扩展有什么区别? 【发布时间】:2013-01-02 09:46:23 【问题描述】:

经过几天的谷歌搜索,我想我无法决定哪一个适用于什么场景。当然,我想使用一个结合了两者的完美框架(当然不切实际)。我什至知道可以一起使用它们。但真正的问题是,每一个中的核心设计元素是什么,使得它们无法相互模仿。 这些是我找到的:

在 RX 中存在虚拟时间,因此调度程序有效地控制整个网络,但这在 TDF 中是不可能的,因为每个 块使用不同的任务,它们独立运行 在 TDF 中,块可以重试接收消息/重新发送和类似的东西,但在 RX 中这是不可能的。 在 rx 中数据流是序列化的,但在 TDF 中这是可选的

最好有一些不是列表的理解,而是试图从一个共同的抽象类/类别中派生出的东西,只讨论结构上的差异。

【问题讨论】:

仅供参考,TPF 和 RX 是互补的,而不是矛盾的。他们天生就可以相互合作,而且做得很好。 我认为最重要的区别是 TDF 使用相互通信的独立块对计算进行建模。 Rx 专注于蒸汽和操纵它们。 @casperOne:我从来没有说过它们是矛盾的。你能提出一种建设性的问题吗?我认为我的观点仍然有效。为什么不回答这个问题而不是关闭它? @casperOne:不,我不是要一个列表,实际上恰恰相反:“......一些不是列表的理解,而是试图从一个共同的抽象类/类别仅谈论结构差异。” (英语不是我的母语,所以也许我没有清楚地表达自己,但重点是我想要一个结构化的答案而不是列表) @casperOne:那么你会如何正确地问这个问题呢?我一一理解,但我无法形成适用于两者的元概念。 【参考方案1】:

我认为解决这个问题的最佳方法是只关注问题的第一行 - 决定在给定场景中使用哪一个。

这两个库有不同的用途。推测每个设计的核心元素以寻找差异就像在问为什么粉笔尝起来不像奶酪——尽管我不能挑剔你列出的具体点。

根据我的经验,很少有非平凡的场景可以以任何明智的方式互换。我认为他们文档中的实际描述对这个问题做出了不言自明的回答:

接收

Reactive Extensions (Rx) 是一个用于组合异步和 使用可观察序列和 LINQ 样式查询的基于事件的程序 运营商。使用 Rx,开发人员使用 LINQ 运算符,并在异步中参数化并发 使用调度程序的数据流。简单地说,Rx = Observables + LINQ + 调度器

我还会在这里查看我的其他答案,这在考虑 Rx 时非常相关:Where to draw the line with reactive programming。其本质是 Rx 有利于及时响应您无法控制的事件。

TPL 数据流

任务并行库 (TPL) 提供数据流组件来帮助 提高并发应用程序的健壮性。这些 数据流组件统称为 TPL 数据流 图书馆。该数据流模型通过以下方式促进基于参与者的编程 为粗粒度数据流提供进程内消息传递和 流水线任务。数据流组件建立在类型和 TPL 的调度基础架构并与 C#、Visual 集成 对异步编程的基本和 F# 语言支持。这些 当您有多个操作时,数据流组件很有用 必须以异步方式相互通信或在您想要时 处理数据,因为它变得可用。例如,考虑一个 处理来自网络摄像头的图像数据的应用程序。通过使用 数据流模型,应用程序可以处理图像帧,因为它们 变得可用。如果应用程序增强了图像帧,对于 例如,通过执行光线校正或减轻红眼,您可以 创建数据流组件的管道。管道的每个阶段 可能会使用更粗粒度的并行功能,例如 TPL 提供的用于转换图像的功能。

【讨论】:

以上是关于TPL 数据流(TDF)和响应式扩展有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

AEM中的parsys组件和响应式布局有啥区别

vuex 与 vue有啥区别

前几天有个同学问我,“什么是响应式编程”?另,它和函数式编程有啥区别?

有啥方法可以让 Vue3 中的 sessionStorage 响应式?

观察者模式和反应式编程有啥区别?

Oracle sql中的隐式和显式数据类型转换有啥区别