首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并发模型: Erlang vs Clojure

并发模型: Erlang vs Clojure
EN

Stack Overflow用户
提问于 2011-06-06 00:21:22
回答 5查看 16.7K关注 0票数 57

我们将使用Clojure编写一个并发程序,该程序将从大量传入邮件中提取关键字,并与数据库进行交叉检查。

我的一个队友建议使用Erlang来编写这个程序。

在这里,我想指出一些我是函数式编程新手的事情,所以我有点怀疑clojure是编写这个程序的好选择,还是Erlang更适合。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-06-06 00:46:57

这两种语言和运行时采用不同的并发方法:

  • Erlang将程序结构化为许多轻量级进程之间的通信。在这种情况下,您可能会让一个主进程将作业和数据发送给许多工作进程,并让更多的进程处理产生的数据。
  • Clojure更倾向于这样一种设计,即多个线程使用公共数据结构共享数据和状态。它听起来特别适合许多线程访问相同数据(只读)并共享少量可变状态的情况。

您需要分析您的应用程序以确定哪种模型最适合您。这也可能取决于您使用的外部工具--例如,数据库处理并发请求的能力。

另一个实际考虑事项是clojure在JVM上运行,JVM上有许多开源库可用。

票数 51
EN

Stack Overflow用户

发布于 2011-06-07 02:18:07

你真的是指并发还是分布式?

如果你指的是并发(多线程、多核等),那么我会说Clojure是自然的解决方案。

  • Clojure的STM模型非常适合于多核并发,因为它在存储和管理线程之间的共享状态方面非常高效。如果您想了解更多,很值得一看this excellent video.
  • Clojure STM允许通过并发线程安全地改变数据。Erlang通过让所有东西都是不可变的来避免这个问题,这本身是很好的,但是当你真正需要共享的可变状态时却没有什么帮助。如果你想要在Erlang中共享可变状态,你必须使用一组既不高效也不方便的消息交互来实现它(这是无共享模型的代价……)
  • 如果你在大型机器中进行并发设置,那么使用Clojure会获得更好的性能,因为Clojure不依赖于消息传递,因此线程之间的通信会更高效。

如果你指的是分布式(即许多不同的机器通过网络共享工作,这些机器实际上是作为独立的进程运行的),那么我会说Erlang是更自然的解决方案:

  • Erlang的不可变、无共享的消息传递风格迫使您以一种可以分发的方式编写代码。因此,惯用的Erlang可以自动分布在多台机器上,并在分布式的、容错的setting.
  • Erlang中运行,因此针对这种用例进行了很好的优化,所以这将是自然而然的选择,当然也是最快的让working.
  • Clojure也能做到这一点,但你需要自己做更多的工作(即,你要么需要实现,要么需要选择某种形式的分布式计算框架)-

目前默认情况下没有这样的框架。

从长远来看,我希望Clojure开发一个与Erlang匹配的分布式计算框架--这样您就可以两全其美了!

票数 64
EN

Stack Overflow用户

发布于 2011-06-06 00:27:42

Clojure是在Java JVM上运行的Lisp。Erlang从一开始就被设计成高度容错和并发的。

我相信这项任务可以用这两种语言中的任何一种以及其他许多语言来完成。您的经验将取决于您对问题的理解程度以及对语言的了解程度。如果你对这两个都是新手,我想说无论你选择哪一个,这个问题都将是具有挑战性的。

你有没有想过像Lucene/Solr这样的东西?这是一个很棒的索引和搜索文档的软件。我不知道“交叉检查”对你的上下文意味着什么,但这可能是一个很好的解决方案。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6244170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档