首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么使用Clojure而不是Java进行并发编程

为什么使用Clojure而不是Java进行并发编程
EN

Stack Overflow用户
提问于 2009-10-15 07:30:43
回答 9查看 2.6K关注 0票数 16

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

EN

回答 9

Stack Overflow用户

发布于 2009-10-15 10:05:36

Clojure是为concurrency设计的。

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

  • 一个软件事务内存系统,用于处理对共享引用的同步和协调更改。您可以将多个引用作为一个原子操作进行更改,而不必担心程序中的其他线程在做什么。在你的交易中,你将始终对世界有一个一致的看法。
  • 是一个用于异步更改的代理系统。这类似于Erlang中的消息传递。
  • 线程对变量的本地更改。这些变量有一个根绑定,由程序中的每个线程共享。但是,当您重新绑定变量时,该变量将仅在该线程中可见。

所有这些并发原语都构建在Clojure不可变数据结构(即列表、映射、向量等)之上。当您进入可变Java对象的世界时,所有的原语都失效了,您又回到了锁和条件变量(必要时也可以在clojure中使用它们)。

票数 18
EN

Stack Overflow用户

发布于 2009-10-15 07:32:28

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

您可能希望检查来自Rick Hickey ( Clojure的创建者)的关于Clojure中并发的this excellent presentation。编辑:显然JAOO已经删除了旧的演示文稿。我还没能找到这个的新来源。

票数 7
EN

Stack Overflow用户

发布于 2009-10-15 08:30:00

因为Clojure是基于函数式编程范式的,也就是说,它通过以下几个简单的规则在并发中实现安全

不可变的state

  • functions

没有副作用

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1570810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档