【发布时间】:2013-04-17 19:22:41
【问题描述】:
我试图说服自己,对于并发编程来说,clojure 确实比 java 更容易。
但我觉得 Clojure Refs/do-sync 和 java 的“同步”块几乎一模一样。然后我读了这个帖子:Clojure STM ( dosync ) x Java synchronize block
---我正在重新启动一个新线程,因为如果我在旧线程中发表评论,由于年龄较大,响应可能不高。
Michał Marczyk 在该线程中的第一条评论声称不同之处在于 java 同步块使用锁而 Clojure 使用事务。我认为这种说法并没有触及问题的本质:在底层,事务仍然是通过锁来实现的。所以“java 使用锁”并不是 Clojure 更好的原因。
我认为真正的好处是 Clojure 事务管理自动锁,就像 DB 事务一样。这样,获取锁的顺序和执行事务的顺序由事务管理器决定,程序员不需要关心这些,而在java世界中,程序员必须显式选择使用哪个锁同步块,这会导致可能的死锁。例如,事务管理器可以使用两阶段锁定来避免死锁。
上面说的有道理吗?
谢谢 杨
【问题讨论】:
标签: concurrency clojure transactions stm