代码之家  ›  专栏  ›  技术社区  ›  user29439

单子和演员

  •  7
  • user29439  · 技术社区  · 16 年前

    我一直在试图找到任何关于何时应该使用monad而不是actors的讨论(在并发场景中),但是我什么也没找到。特别是,我想知道被动扩展(LINQ to Events)与F#的MailboxProcessor的用法。请举例说明你可能有的任何哲学推理。

    更新

    我见过很多同时使用这两种方法的例子:Rx和节点.js(CPS,不是真正的延续monad)vs.F#的MailboxProcessor和Scala的Akka框架。我只是不知道你为什么会选择一个而不是另一个。

    4 回复  |  直到 15 年前
        1
  •  4
  •   kvb    16 年前

    我不确定这个问题的措辞是否合理-有许多不同的单子(例如,标识单子、列表单子、选项单子等等),其中大多数与并发无关。此外,更多地了解您正在处理的特定场景会很有帮助-“并发”是一个模糊的话题。取决于你想要达到的目标,F# async 工作流(基于 Async 蒙纳德)可能是你最好的选择。

    如果您使用的是F#,我建议不要直接使用LINQ,因为通过F#访问这些库时会有一种非常陌生的感觉。但是,您可以创建令人愉快的F#包装器(例如现有的 Seq 和 Observable 模块)。此外,对于一元类型,您可以创建一个计算表达式生成器(例如,您可以使用反应式扩展创建一个生成器,该扩展允许您使用计算表达式来构建和合成 IObservable s) 是的。

        2
  •  1
  •   jdoig    16 年前

    如果你有相关资料的链接,我很想看看RX代替MailboxProcessor的用法。

    MSDN ). 你需要RX的事件,对吧?

    其中,与MbP一样,我所需要的只是一个有区别的消息联合,即当接收到给定消息时我希望执行的函数列表。以及处理这个问题的邮箱处理器。

    这些代码看起来都很整洁。我可以把我的MbP集合在一个模块中,然后我的“对象”模块看起来像

    • 记录
    • 消息DU
    • 包含一些getter和setter的包装器,这些getter和setter将数据发布到MbP

    虽然我只是一个F#junior,所以我可能离我的计算有一英里远,这是一个外观和感觉的东西,而不是一个适合的目的选择(因为我还没有资格打这个电话)

        3
  •  1
  •   Community Mohan Dere    6 年前

    如果你寻求“一个纯粹的功能替代演员模型”,那么请看这篇伟大的文章从保罗Chiusano的博客

    pchiusano.blogspot.ro/2010/01/actors-are-not-good-concurrency-model.html (存档于: http://archive.is/NxNLc )

    以下是一些参考资料:

    http://noelwelsh.com/programming/2013/03/04/why-i-dont-like-akka-actors/

    演员不作曲 Akkas演员没有有效的类型 类型系统是我们使用Scala的原因。

    https://opencredo.com/akka-typed/

    不幸的是,当前的API有一些缺点,这些缺点在很大程度上与缺乏类型安全性有关

    http://doc.akka.io/docs/akka/snapshot/scala/typed.html

    本项目现状及与阿克卡演员的关系 Akka Typed是多年研究和先前尝试(包括2.2.x系列中的Typed频道)的结果,它正在走向稳定,但要使Akka的核心概念发生如此深刻的变化需要很长时间

    这样做的一个副作用是,现在可以单独测试行为,而不必将其打包到Actor中,测试可以完全同步运行,而不必担心超时和虚假故障。另一个副作用是行为可以很好地组合和修饰

    Composable application architecture with reasonably priced monads

    heathermiller提出的“函数传递风格”的概念可能是分布式函数编程模型的关键。

    SF Scala: Heather Miller, Function-Passing Style, A New Model for Distributed Programming

    :现在我们可以使用 Aecor

    • programming model 和
    • 使用 Akka runtime

    “行为属于域层,运行时位于基础结构层。”

    https://pavkin.ru/aecor-part-3/ , http://aecor.io

        4
  •  0
  •   user29439 user29439    14 年前

    我要回答我自己的问题,并说你应该使用这两个。这是基于 Don Syme's post

    我真的不喜欢这个答案,我很高兴有人能给我一个更好的解释,告诉我什么时候该用它们。

    更新时间:

    看到了吗 MiniRx FSharpx ,用于使用 MailboxProcessor . 作为 邮箱处理器 本身是使用 async 蒙纳德,这些拼凑起来确实可以一起工作。它们只是不同的抽象手段。