14

scala如何使编写多线程程序比在java中更容易? scala可以做什么(java不能)来利用多个处理器?Scala对Java的并发编程有什么优势?

+4

Java可以做Scala可以做的任何事情,反之亦然。它们都运行在JVM中,它们都是图灵完备的,所以根据定义,任何一个都可以做与其他的相同的事情。不同的是,一种语言比另一种语言更容易或更自然。 – cHao 2010-08-20 23:10:13

+0

@cHao @ Zan编辑了一个问题,以更好地解决问题。 :) – 2010-08-20 23:15:13

回答

6

还有什么都没有 Scala确实没有。那会很愚蠢。 Scala运行在与Java相同的JVM上。

什么是斯卡拉确实做的是使它更容易编写,更容易推理和更容易调试多线程程序。

并发性的Scala的好处是它关注不可变对象,它的消息传递和它的Actor。

这为您提供线程安全的只读数据,将数据传递到其他线程的简单方法以及简单使用线程池。

+2

我会添加闭包。它确实使许多事情变得更容易。 – 2010-08-21 05:37:16

+1

我也会添加分隔延续,真正改变了编写并发程序的游戏场。希望这个惊人的图书馆支持能在几个月内出现。 – jsuereth 2010-08-21 13:47:50

13

并发的规则是

1避免它,如果你能

2分享什么,如果你能

3股不可改变的对象,如果你能

4要非常小心(和幸运的)

对于规则2 Scala通过提供一个很好地集成的消息传递库以演员的形式出现在盒子中。

对于规则3,默认情况下,Scala有助于使一切不可变。

对于规则4 Scala灵活的语法允许创建内部DSL,使其更加容易,不那么罗嗦地表达您所需要的内容。即少了意外的地方(如果做得好的话)

+1

我认为#1越来越难以做到。我会说使用一个框架,例如map-reduce或某些fork-join库,可以帮助您编写并发程序,而不会感到并发。 – jsuereth 2010-08-21 13:47:07

+0

我同意。仔细检查您的需求并选择适合这些需求的并发模式是非常值得的。然后使用一个调试过的库/框架来实现这些。 – 2010-08-22 19:30:01

+1

#1需要来的名单;相反,我们应该积极寻找利用现代计算机上可用的多CPU核心的方法。 – 2011-01-15 05:25:54

12

如果以Akka作为并发(和分布式)计算的基础,有人可能会认为唯一的区别是通常的区分Scala和Java的区别,因为Akka同时具有Java和Scala绑定所有设施。