我一直在试图找到任何关于什么时候应该使用monads而不是参与者(在并发场景中)的讨论,但我什么也没有发现。特别是,我想知道反应性扩展(LINQ )与F#的MailboxProcessor之间的关系。除了任何哲学推理之外,还请给出一些例子。
为了获得更好的上下文,更新,反应性扩展以IObservable/i观察者的形式实现连续单元。我并不是说我必须使用F#,只是F#有一个以MailboxProcessor<'T>的形式在.NET语言中可用的具体的“参与者模型”。
我想了解的是,何时使用monad (在本例中是延续monad)与参与者模型进行并发。如果monad (据我理解)不引入状态,则参与者有自己的内部状态,根据需要对其内部状态进行修改,以提供受保护的访问。
我见过许多使用这两种方法的例子: Rx和node.js (CPS,实际上不是延续monad)和F#的MailboxProcessor和Scala的Akka框架,我只是不知道为什么你会选择一个而不是另一个。
发布于 2010-08-30 10:07:16
请原谅我的新手,因为我正在学习F#。
我很好奇地看到使用RX代替MailboxProcessor,如果你有任何相关资料的链接。
根据我有限的理解,我会在我自己的代码中选择MbP,因为在F#中设置事件有点麻烦(我可以从本文:MSDN中学到)。你需要RX的事件来连接到对吗?
与MbP一样,我所需要的只是一个受歧视的消息联合,一个在接收到给定消息时希望执行的函数列表。以及处理这件事的邮箱处理器。
在代码中,这一切看起来都很整洁。我可以把我的MbP放在一个模块中,然后我的“对象”模块看起来就像
对我来说,这看起来比我用事件编写代码要整洁得多,正如我链接到的那篇MSDN文章所描述的那样。
虽然我只是一个小F#,所以我可能距离我的计算距离一英里,这是一个外观和感觉的事情,而不是一个适合的选择(因为我还没有资格作出那个决定)。
https://stackoverflow.com/questions/3598124
复制相似问题