其他编程语言有哪些库来提供 Erlang 风格的并发模型(进程、邮箱、模式匹配接收等)?
注意:我对旨在类似于 Erlang 的东西特别感兴趣,而不仅仅是任何线程或队列库。
其他编程语言有哪些库来提供 Erlang 风格的并发模型(进程、邮箱、模式匹配接收等)?
注意:我对旨在类似于 Erlang 的东西特别感兴趣,而不仅仅是任何线程或队列库。
Ulf Wiger最近就这个主题发表了一篇很棒的文章——在你可以称之为“Erlang 风格并发”之前,这是他根据需要定义的属性:
上面的第 2 点是最难支持的 VM 和最初不是为并发设计的语言实现。这并不是要打击其他语言中的 Erlang 式并发实现,但 Erlang 的很多价值来自于能够创建数百万个进程,如果进程抽象与操作系统级别具有 1-1 的关系,这将非常困难线程或进程。Ulf 在上面的链接中有更多关于此的内容。
.NET 的Microsoft并发和协调运行时。
CCR 适用于将组件分成只能通过消息交互的部分的应用程序模型。该模型中的组件需要在消息之间进行协调,处理复杂的故障场景,并有效地处理异步编程。
Scala 支持演员。但我不会故意称 scala 与 Erlang 相似。
尽管如此,scala 绝对值得一看!
消息传递接口 (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。
kilim也是一个 java 库,它为 Java 语言带来了 erlang 风格的消息传递/actors。
Mike Rettig 创建了一个名为 Retlang 的 .NET 库和一个名为Jetlang的 Java 端口,其灵感来自 Erlang 的并发模型。
微软对 Erlang 的非生产就绪回答:Microsoft Axum
白蚁为 Gambit 计划。
如果您使用 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 的新项目。
对于 python,您可以尝试使用处理模块。
JoCaml使用连接演算扩展了 OCaml,用于并发和分布式编程。
Akka ( http://akka.io ) 深受 erlangs OTP 的影响。它建立在 scala 的 actor 之上,非常适合 JVM 上的并发。