Erlang对F#的并发承诺

时间:2010-10-02 19:25:09

标签: f# erlang

Joe Armstrong先生说,使用Erlang,我们可能会使用N核心将序列代码运行N倍。这适用于F#吗?或者是以这种方式设计的Erlang VM? F#管理操作系统或语言中的进程吗?

2 个答案:

答案 0 :(得分:10)

F#中的MailboxProcessor类型(参见MSDN docs)实现了与Erlang基本相同的基于代理的并发模型。唯一的区别是Erlang更适合分布式计算(跨多台计算机),而F#主要在一台机器上使用编程模型(但多线程/核心)。

一般来说,我认为关于Erlang的说法也适用于F#。

关于引用:我不太确定作者究竟想说的是什么(可能有一些上下文丢失了?)。这当然并不意味着你可以采用通常的(顺序)程序,并以更快的速度神奇地运行它。

但是,如果您使用Erlang或基于F#agnet的并发编程模型,那么您可以使用每个额外的核心获得加速。这意味着您将程序编写为大量代理(F#中MailboxProcessor的实例)。 个人代理是作为顺序子程序编写的,但您仍需要考虑不同的编程。

技术方面:Erlang不使用物理操作系统线程,也不使用F#,因此行为应该非常相似。这意味着您可以创建大量代理(这是编程模型的重点)。 F#中的代理基于异步工作流程,这使得这成为可能。

答案 1 :(得分:1)

添加核心只会提高应用程序的速度,如果它足够并发使用它们,请参阅Amdahl's Law。正确使用Erlang可以更容易地以这种方式构建应用程序,因为并发性简单且便宜。