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綁定所有設施。