嗨伙计们:在接触到scala的演员和Clojure的期货之后,我觉得这两种语言都支持多核数据处理。
但是,我仍然无法确定两种模型的并发特性和优缺点之间的真正工程差异。这些语言是否在处理并发进程抽象方面是互补的还是反对的?
其次,关于大数据问题,scala社区继续明确地支持Hadoop并不清楚(而clojure社区显然也是如此)。 Scala开发人员如何与hadoop生态系统连接?
对这两个问题的任何见解都将不胜感激。
答案 0 :(得分:8)
某些解决方案很好地由代理商/演员解决,而有些解决方案则没有。除了特定问题如何适用于一般解决方案类之外,这种区别并非真正与语言有关。这是一个(非常简短的)Actors / agents与References的比较,试图弄清楚该工具必须符合并发性问题。
演员在分布式情况下表现优异,其中无需同时修改数据。如果你的问题可以纯粹通过传递消息来表达,那么演员就可以做到这一点。演员在需要同时修改多个相关数据结构的地方工作不佳。这种规范的例子是在银行账户之间转移资金。
Clojure的ref
是一个很好的解决方案,可以解决许多线程需要同时修改同一个东西的问题。他们擅长共享内存多处理器系统,如今天的PC和服务器。除了银行账户示例之外,Rich Hickey(clojure的作者)使用棒球比赛的例子来解释为什么这很重要。如果你想用演员来代表一个棒球比赛,那么在你移动球之前,所有的球迷都必须向它发送一条消息,询问它在哪里......如果他们想看一个球员接球,事情就会变得平稳更复杂。
Clojure有一个cascalog,这使得编写hadoop工作看起来很像编写clojure。
答案 1 :(得分:3)
Actors提供了一种处理潜在交错和同步控制的方法,这种方法在尝试让多个线程协同工作时不可避免地出现。每个actor都有一个消息队列,它按顺序一次处理一个消息,以避免需要包含显式锁。在这种情况下,Future提供了一种等待演员响应的方法。
就Hadoop而言,Twitter刚刚发布了一个专门针对Hadoop的库,名为Scalding,但只要该库是为JVM编写的,它就可以使用任何一种语言。