gpt4 book ai didi

concurrency - 单子(monad)和 Actor

转载 作者:行者123 更新时间:2023-12-04 08:16:51 28 4
gpt4 key购买 nike

我一直在尝试找到任何讨论何时应该优先使用单子(monad)而不是 Actor (在并发场景中),但我什么也没找到。特别是,我想知道响应式(Reactive)扩展(LINQ to Events)与 F# 的 MailboxProcessor 的使用。除了您可能拥有的任何哲学推理之外,请举例说明。

更新
为了更好的上下文,响应式扩展以 IObservable/IObserver 的形式实现了 continuation monad。我不一定说我必须使用 F#,只是说 F# 有一个具体的“ Actor 模型”,它以 MailboxProcessor<'T> 的形式在 .NET 语言中可用。

我想了解的是何时使用 monad(在本例中为 continuation monad)与用于并发目的的 actor 模型。在 monad(据我所知)不引入状态的地方,参与者有自己的内部状态,根据需要进行修改以提供 protected 访问。

我见过很多同时使用的例子:Rx 和 node.js(CPS,不是真正的 continuation monad)与 F# 的 MailboxProcessor 和 Scala 的 Akka 框架。我只是不知道你为什么会选择一个而不是另一个。

最佳答案

我不确定这个问题是否有意义 - 有许多不同的单子(monad)(例如身份单子(monad),列表单子(monad),选项单子(monad)......),其中大部分与并发无关。此外,更多地了解您正在处理的特定场景会很有帮助——“并发”是一个有点模糊的话题。根据您要实现的目标,F# 的 async工作流(基于 Async monad)可能是你最好的选择。

如果您使用 F#,我建议您不要直接使用 LINQ-to-anything,因为通过 F# 访问这些库时会有一种非常陌生的感觉。但是,您可以创建令人愉快的 F# 包装器(例如现有的 SeqObservable 模块)。此外,对于 monadic 类型,您可以创建一个计算表达式构建器(例如,您可以使用 Reactive Extensions 创建一个构建器,这将使您能够使用计算表达式来构建和组合 IObservable s)。

关于concurrency - 单子(monad)和 Actor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3598124/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com