在Scala并发模型的背景下探讨Clojure的futures

11

在接触了Scala的Actors和Clojure的Futures后,我感觉这两种语言都对多核数据处理提供了很好的支持。

然而,我仍然没有能够确定并发特性之间的真正工程差异以及这两种模型的优缺点。这两种语言在并发进程抽象方面是互补还是相反的?

其次,关于大数据问题,不清楚Scala社区是否继续明确支持Hadoop(而Clojure社区显然是支持的)。Scala开发者如何与Hadoop生态系统交互?

2个回答

9
一些问题可以通过代理/执行器很好地解决,而有些则不能。这种区别实际上与语言无关,更多地是关于特定问题如何适应一般类别的解决方案。这是一个(非常简短的)Actor/agent与引用之间的比较,旨在澄清工具必须适用于并发问题的要点。
在不需要同时修改数据的分布式情况下,Actor表现出色。如果您的问题可以纯粹通过传递消息来表达,那么Actor就可以解决问题。当他们需要同时修改几个相关数据结构时,Actor的工作效果很差。其中的典型例子是在银行账户之间转移资金。
Clojure的ref是解决许多线程需要同时修改同一事物的问题的绝佳解决方案。它们擅长于共享内存多处理器系统,例如今天的个人计算机和服务器。除了银行账户示例外,Rich Hickey(clojure的作者)使用棒球比赛的例子来解释为什么这很重要。如果您想使用Actor来表示棒球比赛,那么在移动球之前,所有粉丝都必须发送消息询问它在哪里...如果他们想观看球员接球,事情会变得更加复杂。
Clojure有cascalog,使编写hadoop作业看起来非常像编写clojure。

4
Actors提供了一种处理潜在交错和同步控制的方法,这是在尝试让多个线程协同工作时不可避免的。每个Actor都有一个消息队列,按顺序逐个处理消息,以避免需要包含显式锁定。在这种情况下,Future提供了一种等待来自Actor响应的方法。
就Hadoop而言,Twitter刚刚发布了一个专门针对Hadoop的库Scalding,但只要该库是为JVM编写的,它就应该能够与任何语言一起使用。

2
由于Scalding只是Cascading的Scala封装,因此如果您正在使用Clojure,则最好使用Cascalog。 - om-nom-nom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接