[multithreading] 其他语言的Erlang式并发


Answers

Ulf Wiger最近在这个话题上有了一个很棒的帖子 - 在你调用“Erlang Style Concurrency”之前,下面是他定义的属性:

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

上面的2号是在最初不是为并发设计的虚拟机和语言实现中最难支持的。 这并不是要在其他语言中推敲Erlang-ish并发实现,但是很多Erlang的价值来源于能够创建数百万个进程,如果进程抽象与OS级别具有1-1关系,这非常困难线程或进程。 Ulf在这个链接上面有更多的内容。

Question

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

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




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




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

CCR适用于将组件分解为只能通过消息进行交互的应用程序模型。 这个模型中的组件需要手段来协调消息,处理复杂的故障情况,并有效地处理异步编程。




Mike Rettig创建了一个名为Retlang的.NET库和一个名为Jetlang的Java端口,它受Erlang的并发模型的启发。




如果您使用的是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虚拟机上构建的类似ruby的脚本语言。 Reia是Revactor创造者的新项目:Tony Arcieri。







Related