为什么Scala适合并发?

yur*_*ura 31 concurrency scala

是否有任何特殊的并发运算符,或者功能样式编程是否适合并发?为什么?

Vas*_*iuk 47

目前,Scala已经支持两种主要的并发策略 - 基于线程的并发(源自Java)和基于类型安全的基于Actor的并发(受Erlang启发).在不久的将来(Scala 2.9),将有两个重要的补充:

  • 软件事务内存(Clojure中的并发基础,可能是Haskell中第二个最流行的并发风格)
  • 并行集合(没有详细说明,它们允许并行化基本集合变换器,如多线程foreachmap跨多个线程).

Actor语法(并发运算符)受Erlang的影响很大(有一些重要的补充) - 关于你使用的库(标准actor,Akka,Lift,scalaz),会有不同的问题和感叹号组合:( !在大多数情况下,用于发送消息的单程), !!,!?等等.

除此之外,即使您使用旧的Java并发框架,一流的功能也可以使您的生活更轻松:ExecutorService,Fork-Join Framework等.

最重要的是,这种不变性可以简化并发性,使代码更具可预测性和可靠性.


leo*_*onm 16

有许多语言功能使Scala适合并发.例如:

  • 大多数数据结构都是不可变的,并不需要任何特殊的并发访问.
  • 功能样式是进行高度并发操作的一种非常好的方法.
  • Scala包含一个非常方便的"actor"框架,可以帮助进行并发异步操作.

进一步阅读:

http://www.ibm.com/developerworks/java/library/j-scala02049.html

http://blog.objectmentor.com/articles/2008/08/14/the-seductions-of-scala-part-iii-concurrent-programming

http://akka.io


Dan*_*ral 10

嗯,有炒作,有现实.Scala因为并发性而闻名,因为它是一种函数式语言,并且因为它的actor库.函数式语言有利于并发性,因为它们专注于不可变性,这有助于并发算法.演员得到了他们的声誉,因为他们是Erlang大规模并发系统记录的基础.

因此,从某种意义上说,斯卡拉的声誉是由于成为一种"我也是"成功技术.然而,Scala确实带来了一些东西,它能够通过库支持对语言的这种添加,这使得它能够适应和采用新技术.

演员不是Scala的原生,但是已经有广泛使用的不同库似乎都是.事务性内存也不是,但是,已经存在看起来像它们的库.

他们,这些库,甚至可用于Java,但它们使用起来很笨重.

所以秘诀不在于它能做什么,而是让它看起来很容易.


dar*_*ioo 7

这里的大关键词是不变性.请参阅此Wiki页面.由于任何变量都可以定义为可变或不可变,因此这是并发的一大胜利,因为如果一个对象无法更改,那么它是线程安全的,因此编写并发程序更容易.

  • "不可变的变量":我总是非常喜欢这句话真正的荒谬...... (7认同)
  • 我现在倾向于说"参考".所以我可以明确"对可变值的不可变引用",或"对不可变值的可变引用".它在实践中对我很有用. (5认同)