2010-05-26 40 views
17

Clojure據說是一種使多線程編程更容易的語言。Java與Clojure的良好併發性示例

Clojure.org網站:

Clojure的簡化在幾個方面多線程編程 。

現在我正在尋找一個在Java和Clojure中解決的非平凡問題,以便我可以比較/對比它們的簡單性。任何人?

+0

一個很好的博客解釋功能:https://perkss.github。io /#/ clojure/ConcurrencyClojure#text-body – Matt 2018-02-18 19:33:14

回答

13

我建議也看看Christophe Grand的thread safe blocking queue;它不到20行,但包含了很多功能,在我看來,它展示了Clojure的一些併發特性,不變性,原子和惰性序列的專家使用。

考慮一下微妙的(可以說是複雜的)註釋代碼的Java替代java.util.concurrent.LinkedBlockingQueue is 842 lines,並且開始理解Clojure如何真正實現它的併發承諾;大大提高了抽象級別,並以大約10-20倍的代碼實現了正確的實現。

您還會注意到,在閱讀Java代碼時,真的很難看到樹木的森林......如果給了它,可以通過查看它來確定它的正確性嗎?還要記住,這段代碼是由Doug Lea(可以說是Java併發性方面的最重要的專家)編寫的,並且適用於Java,具有很高的可讀性;我非常懷疑我可以很快寫出可讀的高性能代碼,如Java,並確保其正確性。

將其與Clojure版本進行對比,並且一旦熟悉Clojure的基礎知識,就很容易區分開來並理解它是如何工作的......在20分鐘內,我能夠理解實現的每一行,並確保它的實現正確性。現在我對Clojure的成語和FP更加熟悉了,我想這會讓我接近5分鐘。我也許可以在幾個小時或幾分鐘內在Clojure中編寫「正確」的代碼。

上述java類的Christophes clojure wrapper也具有啓發性,因爲它與第一個版本共享相同的功能接口。

4

請期待Rich Hickey's Ants example - 它展示瞭如何使用Clojure的特性來構建併發程序

+1

它還有一個Java版本嗎?我正在尋找兩種語言的例子,所以我可以比較/對比。 – 2010-05-26 18:26:38

+0

我記得,有人寫了Java版本,但現在找不到它...... – 2010-05-27 07:11:02

5

The Wide Finder Project,由蒂姆·佈雷開始,有一些Clojure的條目 - 最引人注目的是由亞歷克斯·奧斯本;他完成了a fantastic write-up--以及Java,Scala和其他一些令人印象深刻的語言。

解決的問題是徹底實用而且作爲並行處理挑戰而非常有趣的,Tim的相關帖子(另請參閱最新的Wide Finder 2系列)閱讀起來非常愉快(並具有良好的教育價值)。再加上Alex的文字真的很棒,即使你決定跳過其他文章,也請閱讀。它使用了一些Clojure特有的功能(如Atoms)以及從Java帶來的東西,它的工作很好,它的工作很好......事實上,它展示Clojure卓越的Java互操作性的方式會很有趣。總而言之,我認爲這可能是最好的開始。