Java与Clojure的良好并发性示例
据说Clojure是一种使多线程编程更容易的语言。
来自 Clojure.org 网站:
Clojure以多种方式简化了多线程编程。
现在我正在寻找一个在Java和Clojure中解决的非平凡问题,这样我就可以比较/对比它们的简单性。任何人?
据说Clojure是一种使多线程编程更容易的语言。
来自 Clojure.org 网站:
Clojure以多种方式简化了多线程编程。
现在我正在寻找一个在Java和Clojure中解决的非平凡问题,这样我就可以比较/对比它们的简单性。任何人?
我建议也看看Christophe Grand的线程安全阻塞队列;它不到20行,但包含了很多功能,在我看来,它展示了Clojure的一些并发功能,不可变性,原子和惰性序列的专家使用。
考虑到Java替代java.util.concurrent.LinkedBlockingQueue是842行微妙的(可以说是复杂的)注释代码,你开始理解Clojure是如何真正实现其并发承诺的;显著提高抽象级别,并以大约 10-20 倍的代码提供正确的实现。
您还会注意到,在阅读Java代码时,很难看到树木的森林......如果你得到了它,你能通过观察它来确定它的正确性吗?还要记住,这段代码是由Doug Lea(可以说是Java并发方面最重要的专家)编写的,并且对于Java来说可读性很强;我非常怀疑我是否能在Java中快速编写可读的高性能代码,并确保其正确性。
将此与Clojure版本进行对比,一旦熟悉了Clojure的基础知识,就很容易梳理并理解它是如何工作的......在20分钟内,我能够理解实现的每一行,并确保其正确性。现在我对Clojure的习语和FP更加熟悉了,我想现在这将花费我近5分钟的时间。我也可以在几个小时或几分钟内在Clojure中编写这样的“正确”代码。
上述java类的Christophes clojure包装器也很有启发性,因为它与第一个版本共享相同的功能接口。
由Tim Bray发起的Wide Finder项目有许多Clojure条目 - 其中最着名的是Alex Osborne;他在上面写了一篇很棒的文章 - 以及Java,Scala和许多其他语言的条目。
正在解决的问题是完全实用的,并且作为并行化挑战相当有趣,Tim关于它的帖子(另请参阅最近的Wide Finder 2系列)阅读起来非常愉快(并且具有良好的教育价值)。加上Alex的文字真的很棒,即使你决定跳过其余的,也请阅读它。它使用一些Clojure特定的功能(如Atoms)以及从Java带来的东西,如果它能很好地完成这项工作......事实上,仅仅因为它展示了Clojure出色的Java互操作的方式,它就会很有趣。
总而言之,我想说这可能是最好的开始。