Erlang风格的其他语言并发

时间:2008-08-22 12:19:30

标签: multithreading concurrency erlang

其他编程语言存在哪些库来提供Erlang风格的并发模型(进程,邮箱,模式匹配接收等)?

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

13 个答案:

答案 0 :(得分:14)

Ulf Wiger最近在这个主题上发表了一篇很棒的文章 - 这里是他在你可以调用“Erlang Style Concurrency”之前定义的属性:

  • 快速创建/销毁流程
  • 支持>>的能力10 000个并发流程,特征基本不变。
  • 快速异步消息传递。
  • 复制消息传递语义(无共享并发)。
  • 流程监控。
  • 选择性留言接收。

上面的第2个是最难在虚拟机和语言实现中支持的,这些实现最初并不是为并发而设计的。这不是在其他语言中敲响Erlang-ish并发实现,但是很多Erlang的价值来自于能够创建数百万个进程,如果进程抽象具有1-,这非常困难1与OS级线程或进程的关系。 Ulf在上面的链接中有更多内容。

答案 1 :(得分:7)

Scala支持演员。但我不会故意将scala称为Erlang。

尽管如此,斯卡拉绝对值得一看!

答案 2 :(得分:7)

消息传递接口(MPI)(http://www-unix.mcs.anl.gov/mpi/)是一个高度可扩展且强大的并行编程库,适用于C语言,但现在有多种类型http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations可用。虽然该库没有引入新的语法,但它提供了一种通信协议来协调可并行化的例程之间的数据共享。

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

并行编程问题的另一个有趣解决方案是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。

答案 3 :(得分:6)

Microsoft Concurrency and Coordination Runtime for .NET。

  

CCR适合于   分离的应用程序模型   组件可以成碎片   仅通过消息进行交互。   该模型中的组件需要手段   处理消息之间的协调   复杂的故障情景,和   有效地处理异步   编程。

答案 4 :(得分:6)

此外,kilim是java的库,它将erlang样式的消息传递/ actor引入Java语言。

答案 5 :(得分:5)

Mike Rettig创建了一个名为Retlang的.NET库和一个名为Jetlang的Java端口,其灵感来自Erlang的并发模型。

答案 6 :(得分:4)

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

答案 7 :(得分:3)

对于python,您可以尝试使用processing module

答案 8 :(得分:3)

Termite用于Gambit计划。

答案 9 :(得分:3)

如果您使用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。

答案 10 :(得分:2)

警告:无耻插头!

我在Haskell中为这种消息传递开发了一个库: Erlang-style Distributed Haskell

沃尔克

答案 11 :(得分:2)

JoCaml使用连接演算扩展OCaml,用于并发和分布式编程。

答案 12 :(得分:1)

Akka(http://akka.io)受到erlangs OTP的严重影响。它建立在scala的actor上,非常适合JVM上的并发。