其他语言的Erlang样式并发

时间:2020-03-05 18:41:58  来源:igfitidea点击:

对于其他编程语言,有哪些库可以提供Erlang样式的并发模型(进程,邮箱,模式匹配接收等)?

注意:我对与Erlang类似的东西特别感兴趣,而不仅仅是任何线程或者队列库。

解决方案

回答

.NET的Microsoft并发和协调运行时。

The CCR is appropriate for an
  application model that separates
  components into pieces that can
  interact only through messages.
  Components in this model need means to
  coordinate between messages, deal with
  complex failure scenarios, and
  effectively deal with asynchronous
  programming.

回答

Scala支持演员。但是我不会故意叫scala类似于Erlang。

尽管如此,scala绝对值得一看!

回答

kilim也是Java的库,它将erlang样式的消息传递/参与者带到Java语言中。

回答

消息传递接口(MPI)(http://www-unix.mcs.anl.gov/mpi/)是一个高度可扩展且健壮的并行编程库,最初针对C,但现在提供了多种口味http:// en .wikipedia.org / wiki / Message_Passing_Interface#实施。尽管该库未引入新语法,但它提供了一种通信协议来协调可并行化的例程之间的数据共享。

传统上,尽管多核系统当然可以利用此库,但它用于大型集群计算而不是用于单个系统并发。

解决并行编程问题的另一个有趣的解决方案是OpenMP,它是一种尝试在各种平台上提供可移植的扩展,以向编译器提供有关哪些代码段易于并行化的提示。

例如(http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):

#define N 100000
int main(int argc, char *argv[])
{
  int i, a[N];
  #pragma omp parallel for
  for (i=0;i<N;i++) 
     a[i]= 2*i;
  return 0;
}

当然,两者都有优点和缺点,但是事实证明前者在学术界和其他重型科学计算应用中非常成功。 YMMV。

回答

对于python,我们可以尝试使用处理模块。

回答

Mike Rettig创建了一个名为Retlang的.NET库和一个名为Jetlang的Java端口,该端口受Erlang的并发模型的启发。

回答

乌尔夫·威格(Ulf Wiger)最近在该主题上发表了一篇精彩的文章,以下是他定义的属性,然后才能将其称为" Erlang样式并发":

  • 快速的过程创建/销毁
  • 能够支持>> 10,000个并发进程,而这些进程在很大程度上没有变化。
  • 快速异步消息传递。
  • 复制消息传递语义(无共享并发)。
  • 过程监控。
  • 选择性消息接收。

上面的第2点在最初并非为并发设计的VM和语言实现中最难支持。这并不是要敲击其他语言中的Erlang式并发实现,而是Erlang的许多价值来自能够创建数百万个进程,如果进程抽象与OS级别具有1-1关系,这将非常困难。线程或者进程。乌尔夫(Ulf)在上面的链接中对此有更多介绍。

回答

白蚁计划计划。

回答

警告:无耻的插头!

我为在Haskell中传递的此类消息开发了一个库:
Erlang风格的分布式Haskell。

沃尔克

回答

如果我们使用的是Ruby,请查看Revactor:[http://revactor.org/] [1]

Revactor是基于Rev高性能事件库构建的Ruby 1.9的Actor模型实现。 Revactor主要用于编写类似Erlang的网络服务和工具。

看一下此代码示例:

myactor = Actor.spawn do
    Actor.receive do |filter|
      filter.when(:dog) { puts "I got a dog!" }
    end
  end

Revactor仅在Ruby 1.9上运行。我相信该库的作者已停止维护它,但其站点上的文档非常好。

我们可能还想看看Reia:一种建立在Erlang VM之上的类似ruby的脚本语言。 Reia是Revactor的创建者的新项目:Tony Arcieri。

回答

Microsoft对Erlang的非生产就绪答案:Microsoft Axum

回答

JoCaml使用连接演算对OCaml进行了扩展,以进行并发和分布式编程。