21

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

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

4

13 回答 13

15

Ulf Wiger最近就这个主题发表了一篇很棒的文章——在你可以称之为“Erlang 风格并发”之前,这是他根据需要定义的属性:

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

上面的第 2 点是最难支持的 VM 和最初不是为并发设计的语言实现。这并不是要打击其他语言中的 Erlang 式并发实现,但 Erlang 的很多价值来自于能够创建数百万个进程,如果进程抽象与操作系统级别具有 1-1 的关系,这将非常困难线程或进程。Ulf 在上面的链接中有更多关于此的内容。

于 2008-09-10T15:40:53.913 回答
7

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

CCR 适用于将组件分成只能通过消息交互的部分的应用程序模型。该模型中的组件需要在消息之间进行协调,处理复杂的故障场景,并有效地处理异步编程。

于 2008-08-22T12:27:27.907 回答
7

Scala 支持演员。但我不会故意称 scala 与 Erlang 相似。

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

于 2008-08-22T12:45:04.523 回答
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。

于 2008-08-22T13:08:51.863 回答
6

kilim也是一个 java 库,它为 Java 语言带来了 erlang 风格的消息传递/actors。

于 2008-08-22T12:46:57.500 回答
6

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

于 2008-08-22T14:15:46.303 回答
5

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

于 2009-06-09T16:40:23.953 回答
4

白蚁为 Gambit 计划。

于 2008-11-08T03:37:46.727 回答
4

如果您使用 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 的新项目。

于 2009-06-09T16:29:40.433 回答
3

对于 python,您可以尝试使用处理模块

于 2008-08-22T14:13:05.890 回答
3

警告:不要脸的插件!

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

沃尔克

于 2009-02-02T06:10:38.867 回答
3

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

于 2009-10-22T08:28:26.503 回答
2

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

于 2011-10-07T21:26:07.093 回答