并发 – 使用无锁算法可以解决Clojure lockfree吗?
我正在进步我的Clojure任务(大约80个问题在4clojure.com上解决),我继续阅读和编码,并试图“得到它”.
现在我被Clojure设计为“无锁并发”有点困惑.我对死锁知之甚少(如:“我写的糟糕的Java代码,最终陷入死锁”,而不是“我在并发专家”).我也读过这个: Why is lockless concurrency such a big deal (in Clojure)? 我意识到Clojure程序不会死机, 但我有点困惑:这是通过实现无障碍锁定算法实现的一个壮举,或者使用了潜在的“可锁定”算法,但使用正确的实现保证永远不会死锁(这将以某种方式“隐藏”到Clojure程序员)? 最近有关于无锁算法的黑客新闻的讨论: http://news.ycombinator.com/item?id=4103921 引用1024cores.net上的以下“无锁算法”页面: http://www.1024cores.net/home/lock-free-algorithms 我不明白这篇文章与Clojure之间如何并发工作的关系. 这让我很困惑:当我在Clojure中开发并发程序时,是否意味着“锁和无锁算法”对我来说是一个非问题? 解决方法
一般来说,Clojure通过适当地处理时间来避免锁的问题在许多系统中,对于一个对象来说,时间是一个非常松散的概念,因为在时间-1(更新前)的对象被编辑到时间-2(更新后)成为该对象),在这个过程中,它是第一个也不是第二个,所以我们使用锁来确保它只有在这个转换之前或之后才可见.协调锁从这个和死锁从…
它是算法,数据结构和时间的组合. Clojure通过组合不可变数据结构,功能编程和协调时间模型(参考,原子,代理等)来实现.在这个模型中,一个函数需要一些东西,并产生下一个版本,同时保留过去只要有人正在看它(直到GC得到它) >不变的数据结构:Clojure的集合在FP的意义上是永恒的.新版本后,旧版本“持续”.这样,观察者不需要锁定对象,因为它们永远不会从它们之下改变.可能存在基于他们正在查看的版本的较新版本,尽管没有更改其副本. *好…几乎从来没有;-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |