Scala在并发编程方面相对于Java有哪些优势?

14

Scala如何比Java更容易编写多线程程序?Scala可以做些什么(Java无法做到的)来促进利用多个处理器?


4
Java和Scala可以做任何相同的事情,它们都运行在JVM上,并且都是图灵完备的。因此,根据定义,它们都能够完成相同的任务。区别在于一个语言相对于另一个语言更加容易或更自然地完成某些任务。 - cHao
@cHao @Zan修改了问题以更准确地解决问题。 :) - Gordon Gustafson
3个回答

15

并发编程的规则如下:

1 如果可能,尽量避免使用并发。

2 如果可能,不要共享任何东西。

3 如果可能,共享不可变对象。

4 要非常小心(还有一点运气)。

对于规则2,Scala 提供了一个集成良好的消息传递库——actors,可以很方便地使用。

对于规则3,Scala 默认使所有内容都是不可变的。

对于规则4,Scala 的灵活语法允许创建内部 DSL,使得表达所需更加简洁,减少了意外情况的发生(如果使用得当)。


1
我认为#1越来越难做了。我会说使用一个框架,例如map-reduce或一些fork-join库,可以帮助你编写并发程序,而不让它感觉像是并发的。 - jsuereth
我同意。仔细审查您的需求并选择适合这些需求的并发模式确实是值得的。然后使用已经调试过的库/框架来实现这些模式。 - Peter Tillemans
1
#1 需要从列表中删除;相反,我们应该积极寻找利用现代计算机上可用的多个CPU核心的方法。 - Lawrence Dol

12
如果一个人将 Akka 作为并发(和分布式)计算的基础,那么可以认为唯一的区别就是通常能够区分 Scala 和 Java 的东西,因为 Akka 对于所有的功能都有 Java 和 Scala 绑定。

6

Scala没有Java所没有的特性,这是不明智的说法。Scala运行在与Java相同的JVM上。

Scala实现了一个多线程程序更易于编写、推理和调试的环境。

Scala在并发编程中的优势在于其专注于不可变对象,消息传递和Actors。

这使得你可以拥有线程安全的只读数据,轻松地将该数据传递给其他线程,并且方便地使用线程池。


2
我会给它加上闭包。这真的可以让很多事情变得更容易。 - Daniel C. Sobral
1
我还会补充说,分隔符连续性确实改变了编写并发程序的游戏规则。希望令人惊叹的库支持能在几个月内出现。 - jsuereth

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