首页 / 知识

关于多线程:其他语言的Erlang风格并发

2023-04-12 21:13:00

关于多线程:其他语言的Erlang风格并发

Erlang-style Concurrency for Other Languages

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

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


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

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

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


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

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

另一个解决并行编程问题的有趣解决方案是OpenMP,它试图在各种平台上提供可移植的扩展,以便向编译器提供关于哪些代码段可以轻松并行化的提示。

例如(http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):

1
2
3
4
5
6
7
8
9
#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;
}

当然,两者都有优点和缺点,但前者已被证明在学术界和其他重型科学计算应用中非常成功。因人而异。


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

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


kilim也是java的库,它将erlang样式的消息传递/ actor带到Java语言中。


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

The CCR is appropriate for an
application model that separates
components into pieces that can
interact only through messages.
Components in this model need means to
coordinate between messages, deal with
complex failure scenarios, and
effectively deal with asynchronous
programming.


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


微软对Erlang的Not-Production-Ready答案:Microsoft Axum


如果您使用Ruby,请查看Revactor:[http://revactor.org/] [1]

Revactor是基于Rev高性能事件库构建的Ruby 1.9的Actor模型实现。 Revactor主要用于编写类似Erlang的网络服务和工具。

看看这段代码示例:

1
2
3
4
5
  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,用于并发和分布式编程。


警告:无耻插头!

我在Haskell中为这种消息传递开发了一个库:
Erlang风格的分布式Haskell。

沃尔克


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


并发语言多线程模式匹配

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢