gpt4 book ai didi

concurrency - Clojure 中的 commute 和 alter 有什么区别?

转载 作者:行者123 更新时间:2023-12-05 06:42:17 25 4
gpt4 key购买 nike

我正在尝试编写非常简单的代码,在 Clojure 中显示 commute 和 alter 之间的不同结果。有人可以为此创建示例吗?

越简单越好理解差异。

最佳答案

假设commute如果使用正确,Refs 的观察值应该没有差异,除非使用 commute可能有助于在竞争激烈的情况下提交事务,而使用 alter 很难做到这一点。 .当然,当这适用时,结果会有相当大的差异......

使用副作用更容易准确地说明事情有何不同。这是一个单线程示例来说明基本属性

  • alter每次“交易尝试”将被调用一次(可能只有一次),

  • commute每次“事务尝试”将被调用一次(虽然 commute 不会导致它们,如果 alter 在同一 dosync block 中使用,则可能涉及重试),然后最后一次计算提交值(所以至少两次,但它自己不会导致重试):


user=> (def r (ref nil))
#'user/r
user=> (dosync (alter r prn))
nil
nil
user=> (dosync (commute r prn))
nil
nil
nil

使用一些 Thread/sleep s 和少数线程可能会在 alter 上引发更多重试边,同时仍在 commute 上观察两次重试一边,调查使用其中一个等对 Ref history 的影响。

关于concurrency - Clojure 中的 commute 和 alter 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37426524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com