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

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

===============>>#1 票数:14

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

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

上面的第2个是最难在VM和语言实现中支持的,这些实现最初并不是为并发而设计的。 of processes, which is pretty damn hard if the process abstraction has a 1-1 relationship with an OS-level thread or process. 这不是要在其他语言中实现Erlang-ish并发实现,但是Erlang的许多价值来自于能够创建个进程,如果进程抽象与操作系统级别具有1-1关系,这非常困难线程或进程。 Ulf在上面的链接中有更多关于此的内容。

===============>>#2 票数:7

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

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

===============>>#3 票数: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;
}

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

===============>>#4 票数:6

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

CCR适用于将组件分成只能通过消息交互的部分的应用程序模型。 此模型中的组件需要在消息之间进行协调,处理复杂的故障情形以及有效处理异步编程的方法。

===============>>#5 票数:6

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

===============>>#6 票数:5

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

===============>>#7 票数:4

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

===============>>#8 票数:3

对于python,您可以尝试使用处理模块

===============>>#9 票数:3

白天计划的白蚁

===============>>#10 票数:3

如果您使用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 VM构建的类似ruby的脚本语言。 Reia是Revactor创始人的新项目:Tony Arcieri。

===============>>#11 票数:2

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

===============>>#12 票数:2

警告:无耻插头!

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

沃尔克

===============>>#13 票数:1

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

  ask by community wiki translate from so

未解决问题?本站智能推荐:

3回复

.NET或C ++中的Erlang样式的并发

经过众多项目之后,单向异步消息传递似乎是编写并发分布式网络服务并保持理智的唯一方法。 我正在寻找一个简单的,最好是开源的.NET或C ++库,该库实现类似于Erlang OTP平台的异步消息传递的概念。 到目前为止,我只发现RetLang有点相似,但是 它不支持通过网络传递消息
3回复

你如何在Erlang中规范并发/相对过程性能?

假设我必须从一个包含许多大型XML文件的目录中读取,我必须解析它并通过网络将它们发送到某个服务,然后再将响应写入磁盘。 如果它是Java或C ++等,我可能会做这样的事情(希望这是有道理的): 然后我会为每个进程分配任何合适数量的线程。 这样我就可以将每个进程的并发性限制在最佳值
1回复

Erlang在运行并发任务时未使用cpu的所有核心,为什么?

当前,我正在读一本“ Programming Erlang”书,我决定在创建N个进程的基准测试中测试我的系统,这是代码: 我在Windows 7 x64上安装了Intel i5,在创建1亿个进程时,我检查了CPU的负载。 事实证明,只有一个内核可以满负荷工作,而其他内核则什么也不做(因
4回复

幕后的Erlang进程是什么?

我对Erlang的了解非常有限,但据我所知,它可以以非常低的成本产生“过程”。 所以我想知道,幕后的那些“过程”是什么? 它们是纤维吗? 主题? 延续?
2回复

减少Erlang BEAM机器

Erlang是一种着名的编程语言,因其轻量级的线程而闻名(除其他外)。 Erlang通常使用BEAM机器实现 。 Erlang BEAM机器的描述(H'97)说 为了保证公平的调度,在固定数量的减少之后暂停进程,然后恢复队列中的第一个进程。 我对这种减少的概念很感兴趣。
2回复

Ets读取并发调整

我正在玩ets调整,尤其是read_concurrency 。 我已经编写了简单的测试来衡量这种调整对读取性能的影响。 测试实现在这里和那里 。 简而言之,该测试顺序创建了三个具有不同read_concurrency选项(没有任何调整, {read_concurrency, true}
3回复

D编程语言中的Erlang风格并发

我认为Erlang风格的并发性是核心数量呈指数级增长的答案。 你可以用其他主流语言伪造它。 但解决方案总是让我失望。 我不愿意放弃多范式编程(C ++ / D)来切换到Erlang的严苛语法。 什么是Erlang风格的并发: 来自其中一位语言作者( 究竟什么是Erlang的并发
1回复

在进行并发方面,Erlang如何比其他语言更好? [关闭]

我不明白为什么erlang本身对并发性很好 如果我们做些花招,还有其他语言(例如C#)可能和erlang一样好吗? 还是大多数语言所没有的erlang非常特定的语言功能? 我们可以像erlang那样编写C吗?
1回复

并发Erlang代码

从以前的考试来看,有一个我不明白答案的问题。 该问题的模块如下所示: 该问题要求考虑将以下功能作为代码的一部分,以及该功能的结果如何。 正确答案是2。我认为应该是3,因为“增加呼叫” f2(Server)是在self()!{f1r, Server, 2}响应之后self()!{f1r
7回复

类似Erlang的Python并发性?

有没有像Erlang那样具有并发性的Python,特别是网络上的透明参与者? 我看过像greenlet和stackless这样的东西,但它们似乎没有为演员提供网络透明度。 我仍然不能完全跳过Erlang / OTP的障碍,所以我很感兴趣,如果有更接近家的东西。