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

关于多线程:其他语言的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上的并发性。


推荐阅读

    探探语言设置|探探怎么设置语言

    探探语言设置|探探怎么设置语言,,1. 探探怎么设置语言打开探探软件,然后就有消息提示的红点,点开就行了!其实这些软件都是挺简单的操作的,都是

    git设置编码|git语言设置

    git设置编码|git语言设置,,git设置编码点击cap4j搜索从git直接链接上拉代码。git语言设置Git是一个开源的分布式版本控制系统,可以有效、高

    多线程cpu电脑|多线程的CPU

    多线程cpu电脑|多线程的CPU,,1. 多线程的CPU四核心四线程,表示这个电脑的CPU核心是4个核心、4个线程的。电脑CPU的核心数量和线程数量越多,

    区域语言设置|区域语言设置工具

    区域语言设置|区域语言设置工具,,区域语言设置工具你好,大致的方法如下,可以参考:1、按下键盘的windows 图标,再开始菜单中单击“设置”;出现的

    c4d语言设置|c4d汉语设置

    c4d语言设置|c4d汉语设置,,1. c4d汉语设置mac版的C4D是这样的,中文字体是有的,但是是以拼音的形式存在,比如黑体就是ht。中文字体以拼音方式

    电脑宣传语|电脑宣传语言

    电脑宣传语|电脑宣传语言,,1. 电脑宣传语言1.我做好了与你过一辈子的打算,也做好了你随时要走的准备,2.每段青春都会苍老,但我希望记忆里的你

    office语言设置|微软office语言设置

    office语言设置|微软office语言设置,,微软office语言设置一、首先点击桌面左下角“WIN键”。二、弹出选项内点击“所有程序”。三、接着点

    小米设置日语|小米设置日语语言

    小米设置日语|小米设置日语语言,,1. 小米设置日语语言MIUI系统文字目前只支持简体中文、繁体中文、英文、藏文和维吾尔文,不支持日文 2. 小

    易语言开发电脑系统|易语言电脑版

    易语言开发电脑系统|易语言电脑版,,1. 易语言电脑版首先编译——是将程序编译为exe文件,只能在有易语言的机子上运行,独立编译——是将程序