簡體   English   中英

Java與Clojure的良好並發示例

[英]Good concurrency example of Java vs. Clojure

據說Clojure是一種使多線程編程更容易的語言。

來自Clojure.org網站:

Clojure以多種方式簡化了多線程編程。

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

我建議也看一下Christophe Grand的線程安全阻塞隊列 ; 它不到20行,但包含了很多功能,在我看來,它展示了Clojure的一些並發特性,不變性,原子和惰性序列的專家使用。

考慮到Java替代java.util.concurrent.LinkedBlockingQueue 是842行細微(可稱復雜)注釋代碼,您開始理解Clojure如何真正實現其並發承諾; 顯着提高抽象級別並提供正確的實現,代碼大約減少10-20倍。

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

與Clojure版本形成對比,一旦熟悉Clojure的基礎知識,就很容易分開並理解它是如何工作的...在20分鍾內,我能夠理解實現的每一行,並確保其正確性。 而現在我對Clojure的成語和FP更為熟悉了,我猜這將使我接近5分鍾。 我也許可以在幾小時或幾分鍾內在Clojure中編寫這樣的“正確”代碼。

上述java類的Christophes clojure包裝器也具有指導性,因為它與第一個版本共享相同的功能接口。

由Tim Bray創辦的Wide Finder項目有許多Clojure項目 - 其中最引人注目的是Alex Osborne; 他對它做了很棒的寫作 - 以及Java,Scala和其他令人印象深刻的語言的條目。

正在解決的問題非常實用且相當有趣,因為並行化挑戰和蒂姆關於它的帖子(另見最近的Wide Finder 2系列)閱讀非常愉快(並且具有良好的教育價值)。 另外亞歷克斯的文字真的很棒,即使你決定跳過其余部分,請閱讀它。 它使用了一些Clojure特有的功能(比如Atoms)以及從Java帶來的東西,它可以很好地和快速地完成工作......事實上,它只是展示Clojure優秀的Java互操作的方式會很有趣。

總而言之,我認為這可能是最好的開始。

請查看Rich Hickey的螞蟻示例 - 它展示了如何使用clojure的功能來構建並發程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM