Scala的并发模型背景下的Clojure期货

jay*_*100 10 concurrency hadoop scala clojure

嗨伙计们:在接触到scala的演员和Clojure的期货之后,我觉得这两种语言都支持多核数据处理.

但是,我仍然无法确定两种模型的并发特性和优缺点之间的真正工程差异.这些语言是否在处理并发过程抽象方面是互补的还是反对的?

其次,关于大数据问题,scala社区继续明确支持Hadoop并不清楚(而clojure社区显然也是如此).Scala开发人员如何与hadoop生态系统连接?

对这两个问题的任何见解将不胜感激.

Art*_*ldt 8

一些解决方案很好地由代理/演员解决,有些则不是.除了特定问题如何适用于一般解决方案类别之外,这种区别并不是真正的语言.这是一个(非常简短的)Actors/agents与References的比较,试图澄清该工具必须符合并发问题的观点.

演员在分布式情况下表现优异,其中不需要同时修改数据.如果你的问题可以纯粹通过传递消息来表达,那么演员就可以做到这一点.演员在需要同时修改多个相关数据结构的地方工作不佳.这种规范的例子是在银行账户之间转移资金.

ref对于许多线程需要同时修改同一个东西的问题,Clojure 是一个很好的解决方案.他们擅长共享内存多处理器系统,如今天的PC和服务器.除了银行账户示例之外,Rich Hickey(clojure的作者)使用棒球比赛的例子来解释为什么这很重要.如果你想用演员来代表一个棒球比赛,那么在你移动球之前,所有的球迷都必须向它发送一条消息,询问它在哪里......如果他们想看一个球员接球,事情就会变得平稳更复杂.

Clojure有cascalog,这使得编写hadoop工作看起来很像编写clojure.


Sea*_*ons 4

Actor 提供了一种处理潜在交错和同步控制的方法,这些交错和同步控制在尝试让多个线程一起工作时不可避免地会出现。每个参与者都有一个消息队列,每次按顺序处理一个消息,以避免需要包含显式锁。在这种情况下,Future 提供了一种等待参与者响应的方法。

就 Hadoop 而言,Twitter 刚刚发布了一个专门针对 Hadoop 的库,名为Scalding,但只要该库是为 JVM 编写的,它就应该适用于任何一种语言。

  • 由于 Scalding 只是 Cascading 的 *scalish* 包装器,如果您使用的是 Clojure,那么使用 [Cascalog](https://github.com/nathanmarz/cascalog) 可能会更好。 (2认同)