Java与Clojure的良好并发示例

Mic*_*ent 17 java concurrency clojure

据说Clojure是一种使多线程编程更容易的语言.

来自Clojure.org网站:

Clojure以多种方式简化了多线程编程.

现在我正在寻找在Java和Clojure中解决的非平凡问题,因此我可以比较/对比它们的简单性.任何人?

小智 13

我建议也看一下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包装器也具有指导性,因为它与第一个版本共享相同的功能接口.


Mic*_*zyk 5

由Tim Bray创办的Wide Finder项目有许多Clojure项目 - 其中最引人注目的是Alex Osborne; 他对它做了很棒的写作 - 以及Java,Scala和其他令人印象深刻的语言的条目.

正在解决的问题非常实用且相当有趣,因为并行化挑战和蒂姆关于它的帖子(另见最近的Wide Finder 2系列)阅读非常愉快(并且具有良好的教育价值).另外亚历克斯的文字真的很棒,即使你决定跳过其余部分,请阅读它.它使用了一些Clojure特有的功能(比如Atoms)以及从Java带来的东西,它可以很好地和快速地完成工作......事实上,它只是展示Clojure优秀的Java互操作的方式会很有趣.

总而言之,我认为这可能是最好的开始.