为什么Clojure而不是Java用于并发编程

Joh*_*son 16 java clojure concurrent-programming

当Java提供并发编程的功能时,使用Clojure(而不是Java)的主要优势是什么?

Jon*_*nas 18

Clojure是为并发而设计的.

Clojure在比Java更高的抽象级别上提供并发原语.其中一些是:

  • 软件事务内存系统,用于处理共享引用的同步和协调更改.您可以将多个引用更改为原子操作,而不必担心程序中的其他线程正在执行的操作.在您的交易中,您将始终拥有一致的世界观.

  • 用于异步更改的代理系统.这类似于在Erlang中传递的消息.

  • 将本地更改线程化为变量.这些变量具有根绑定,由程序中的每个线程共享.但是,当您重新绑定变量时,它只会在该线程中可见.

所有这些并发原语都建立在Clojures不可变数据结构(即列表,映射,向量等)之上.当您进入可变Java对象的世界时,所有基元都会崩溃,您将回到锁定和条件变量(必要时也可以在clojure中使用).


Bri*_*sen 7

如果不是Clojure的专家,我会说主要的优点是Clojure隐藏了很多并发编程的细节,因为我们都知道魔鬼在细节中,所以我认为这是一件好事.

您可能想要查看Rick Hickey(Clojure的创建者)关于Clojure并发性的优秀演示.编辑:显然JAOO删除了旧的演示文稿.我还没有找到新的来源.


oxb*_*kes 6

因为Clojure基于函数式编程范例,也就是说它通过遵循一些简单的规则来实现并发性的安全性:

  • 不可改变的国家
  • 功能没有副作用

因此编写的程序几乎具有内置的水平可伸缩性,而基于锁的并发机制(与Java一样)容易出现涉及竞争条件,死锁等的错误.


Aar*_*lla 5

因为过去10年世界已经发展,Java语言(!= JVM)发现很难跟上.JVM的更多现代语言基于新的想法和改进的概念,这使得许多繁琐的任务变得更加简单和安全.


nil*_*amo 5

使用不可变类型的一个很酷的事情是大多数内置函数已经是多线程的.简单的"减少"将跨越多个核心/处理器,无需您进行任何额外的工作.

因此,确保您可以使用Java进行多线程,但它涉及锁等等.Clojure是多线程的,没有任何额外的努力.