其他编程语言提供了哪些库来提供Erlang风格的并发模型(进程,邮箱,模式匹配接收等)?其他语言的Erlang风格的并发性
注:我特别感兴趣的是与Erlang类似的东西,而不仅仅是任何线程库或排队库。
其他编程语言提供了哪些库来提供Erlang风格的并发模型(进程,邮箱,模式匹配接收等)?其他语言的Erlang风格的并发性
注:我特别感兴趣的是与Erlang类似的东西,而不仅仅是任何线程库或排队库。
消息传递接口(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;
}
有优点和缺点这两个,当然,但前者已被证明是在学术界和其他重型科学计算的应用非常成功。因人而异。
Microsoft的Concurrency and Coordination Runtime for .NET。
的CCR是适合于该 部件分离成片,可以 仅通过消息交互的应用程序 模型。 这个模型中的组件需要手段 消息之间的协调,处理 复杂的故障情况,和 有效地处理异步 编程。
斯卡拉支持演员。但我不会打算scala故意类似于Erlang。
尽管如此scala绝对值得一看!
另外kilim是一个java库,它将erlang风格的消息传递/参与者引入Java语言。
对于python,您可以尝试使用processing module。
Mike Rettig创建了一个名为Retlang的.NET库和一个名为Jetlang的Java端口,它受Erlang并发模型的启发。
Ulf Wiger有一个伟大的职位最近关于这个主题 - 在这里是因为需要才可以调用的东西“二郎风格并发”,他定义的属性:
上面的第2个数字最难支持最初并未设计为并发的VM和语言实现。这并不是要在其他语言中推敲Erlang-ish并发实现,但是很多Erlang的价值来自于能够创建进程的百万,如果进程抽象与OS具有1-1关系,这非常困难级别的线程或进程。在上面的链接中,Ulf有很多这方面的内容。
Termite for Gambit Scheme。
如果您在使用Ruby,看看Revactor的:http://revactor.org/][1]
Revactor的是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虚拟机之上的ruby式脚本语言。 Reia是Revactor创造者的新项目:Tony Arcieri。
微软不生产,现成的答案二郎:Microsoft Axum
JoCaml OCaml的延伸与加盟结石并发和分布式编程。
Akka(http://akka.io)受Erlangs OTP严重影响。它建立在scala的角色之上,并且非常适合JVM上的并发。
这里的主要困难是,尽管你可以用其他语言传递消息,但是模仿Erlang使用大量进程是非常困难的。 Erlang中的产卵过程类似于在Java或Python中实例化对象 - 您不需要考虑。如果您在操作系统级别执行此操作,您将很快耗尽资源,这意味着它不仅仅是消息传递,而且还必须将其合并到架构中。在这方面,Erlang的虚拟机有点难以遵循。当然,并非每个问题都需要数百万个并发进程。 – zxq9 2014-10-01 10:52:56