Kri*_*son 19 concurrency erlang multithreading
其他编程语言存在哪些库来提供Erlang风格的并发模型(进程,邮箱,模式匹配接收等)?
注意:我特别感兴趣的是与Erlang类似的东西,而不仅仅是任何线程或排队库.
小智 14
Ulf Wiger最近在这个主题上发表了一篇很棒的文章 - 这里是他在你可以调用"Erlang Style Concurrency"之前定义的属性:
上面的第2个是最难在VM和语言实现中支持的,这些实现最初并不是为并发而设计的.这不是要在其他语言中实现Erlang-ish并发实现,但是Erlang的许多价值来自于能够创建数百万个进程,如果进程抽象与操作系统级别具有1-1关系,这非常困难线程或进程.Ulf在上面的链接中有更多关于此的内容.
小智 7
消息传递接口(MPI)(http://www-unix.mcs.anl.gov/mpi/)是一个高度可扩展且强大的并行编程库,适用于C,但现在有多种版本可供使用http:// en .wikipedia.org/wiki/Message_Passing_Interface #Introductions.虽然该库没有引入新的语法,但它提供了一种通信协议来协调可并行化的例程之间的数据共享.
传统上,它用于大型集群计算,而不是单个系统用于并发,尽管多核系统当然可以利用这个库.
另一个解决并行编程问题的有趣解决方案是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;
}
Run Code Online (Sandbox Code Playgroud)
当然,两者都有优点和缺点,但前者已被证明在学术界和其他重型科学计算应用中非常成功.因人而异.
小智 5
如果您使用 Ruby,请查看Revactor。
Revactor 是 Ruby 1.9 的 Actor 模型实现,构建在 Rev 高性能事件库之上。Revactor 主要是为编写类似 Erlang 的网络服务和工具而设计的。
看一下这个代码示例:
myactor = Actor.spawn do
Actor.receive do |filter|
filter.when(:dog) { puts "I got a dog!" }
end
end
Run Code Online (Sandbox Code Playgroud)
Revactor 仅在 Ruby 1.9 上运行。我相信该库的作者已经停止维护它,但他们网站上的文档非常好。
您可能还想看看 Reia:一种构建在 Erlang VM 之上的类 Ruby 脚本语言。Reia 是 Revactor 的创建者 Tony Arcieri 的新项目。