【问题标题】:Why do we need all 3 - tesser, transducers core.reducers in Clojure为什么我们在 Clojure 中需要全部 3 - tesser、transducers core.reducers
【发布时间】:2016-05-19 10:50:03
【问题描述】:

我试图了解 Clojure 中用于并行计算的所有不同抽象。在阅读有关主题时,我会迷失在冗长文章中的所有细节中。

我正在寻找一个简短的答案

  • 为什么我们需要不同的库以及
  • 何时使用和何时不使用特定库。

到目前为止,因为它们看起来相同而让我感到困惑的是

  • tesser,
  • 转换器(带有 core.async 管道),
  • core.reducers(平行折叠)

【问题讨论】:

  • 我认为传感器和归约器更适用于并行编程,而 core.async 更适用于通信顺序进程 (CSP) 风格的并发。

标签: clojure parallel-processing


【解决方案1】:

这(仍然)是个好问题!

我只注意到 tesser 使用减速器、折叠(或拥抱!),并提供对高效和多核处理的访问。在要求函数具有关联性和可交换性方面,它有一些限制。两者都有 foldr(向右折叠),即“在通往懒惰的道路上”。

传感器也有 foldl。显然,左折叠是“在循环路径上”。看来,有了换能器,您就可以随心所欲了!

我看到的 2014 Vimeo 视频指出了传感器的一个缺点,程序员需要获得中间结果。 Clojure 有状态转换器可能会解决很多问题,并在 tesser 中解决。

我是这个主题的新手,所以,我自己正在研究它!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 2016-06-30
    • 2013-04-06
    • 2014-06-18
    • 2017-02-26
    • 2011-04-03
    • 2017-07-27
    相关资源
    最近更新 更多