Clojure Ref、Var、Agent、Atom 之间的差异以及示例

2023-12-23

我对 Clojure 很陌生,你们能给我解释一下现实世界的场景吗?我的意思是,在哪里使用 Ref、Var、Agent、Atom。我读过书,但是仍然无法理解现实世界的例子。


我强烈推荐“The Joy of Clojure”或“programming Clojure”来真正回答这个问题,我可以重现每个动机的简短片段:

从观看开始这段关于身份概念的视频 http://www.infoq.com/presentations/Are-We-There-Yet-Rich-Hickey and/or 在这里学习 http://clojure-doc.org/articles/language/concurrency_and_parallelism.html.

  • 参考文献用于协调同步访问“许多身份”。
  • 原子是为了不协调同步访问单一身份。
  • 代理是为了不协调异步访问单一身份。
  • 变量用于线程本地孤立的身份具有共享的默认值。

协调的当两个身份需要一起更改时,会使用访问权限,典型的例子是将资金从一个银行帐户转移到另一个银行帐户,它需要完全转移或根本不转移。

不协调当只有一个身份需要更新时使用访问权限,这是一种很常见的情况。

同步当呼叫预计要等到所有身份都已确定后再继续时,才使用访问权限。

异步访问是“即发即忘”,让身份在自己的时间内达到新的状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure Ref、Var、Agent、Atom 之间的差异以及示例 的相关文章

  • Clojure Web 应用程序 - 我从哪里开始?

    最近我一直在研究 Clojure 我喜欢这门语言 我想看看我是否可以在其中制作一个小型网络应用程序 只是为了挑战自己 但是 我完全没有设置任何与 Java 相关的 Web 应用程序的经验 事实上 我对 Java 并没有太多的经验 我从哪说起
  • 获取调用表单的名称空间

    我想要一个宏this ns这样它就会返回调用它的位置的名称空间 例如 如果我有这段代码 ns nstest main require nstest core as nstest defn ns str x gt x getName name
  • 在 JavaScript 中引用 C# 变量

    我已经阅读了很多线程 但我不明白为什么这不起作用 我正在创建一个将用作导航栏的 SharePoint Web 部件 一切都很顺利 直到我尝试在 JS 代码中引用 C 变量 这是来自 VisualWebPart1UserControl asc
  • 如何在 Swift 中将 Int 转换为字符

    我在这里挣扎了十多分钟 失败了 我屈服了 我需要在 Swift 中将 Int 转换为 Character 但无法解决它 Question 你如何转换 cast an Int integer to a Character char 在斯威夫特
  • 为什么 Clojure MySQL 查询结果中出现“M”

    我有一个返回一行的 Clojure 查询 下面是返回行 映射 的部分打印输出 employer percent 0 00M premium 621 44M 这两列在mysql表中分别是decimal 5 2 和decimal 7 2 为什么
  • 无法删除 IntelliJ/Cursive 中的括号

    我正在使用 IntelliJ Cursive 编写 Clojure 我发现 删除括号的唯一方法就是将其中的内容完全删除 然后才能将括号删除 例如 假设我有以下代码 list 我只想删除左括号 一旦我在左括号上按退格键 IDE 就会忽略此行为
  • Clojure def 与 defn 对于没有参数的函数

    我用 clojure 编写了一个程序 但有些函数没有参数 将此类函数编码为 def 而不是不带参数的 defn 有什么优点 def t0 System currentTimeMillis defn t1 System currentTime
  • 确保 Clojure 中只有一个服务实例正在运行/启动/停止的规范方法?

    我正在用 Neo4j 支持的 Clojure 编写一个有状态服务器 它可以服务套接字请求 例如 HTTP 当然 这意味着我需要能够从该服务器内启动和停止套接字服务器 在设计方面 我希望能够在此服务器中声明一个 服务 并启动和停止它 我在 C
  • 在 Clojure 中解压缩 zlib 流

    我有一个二进制文件 其内容由zlib compress在Python上 有没有一种简单的方法可以在Clojure中打开和解压缩它 import zlib import json with open data json zlib wb as
  • MVC 使用 var 的示例

    也许我生活在泡沫中 或者只是太新了 但我想知道是否有其他人注意到在 Microsoft 的许多 MVC 示例中大量使用 var 来声明变量而不是特定类型 这样做有什么目的吗 或者这是现在要做的 流行 事情 或者只是个人风格 贾里德 帕森斯
  • webjure 与 compojure?

    我听说过两个基于 Clojure 的 Web 应用程序框架 Webjure 和 Compojure 有人可以告诉我哪个更好吗 现在您可以添加Ring http groups google com group clojure browse t
  • 如何在 RHEL 6.1 / JDK7 上安装 Clojure 1.3 with contribs?

    我一直在努力让它发挥作用 获取 clojure 1 3 是一件轻而易举的事 但现在我一直在尝试安装 contrib 库 但遇到了错误 有关于如何正确执行此操作的指南吗 旧的 clojure contrib 整体库与 clojure 1 3
  • Clojure 缩减函数的目的

    clojure 的目的是什么reduced函数 在 Clojure 1 5 中添加 https clojure github io clojure clojure core api html clojure core reduced htt
  • var 与具体类型的使用[重复]

    这个问题在这里已经有答案了 我已经在 stackoverflow 中检查了 5 个或更多关于 var 使用的帖子 但我仍在寻找有关 var 使用的答案 我习惯使用 Concrete 类型而不是 var 但是我的 Resharper 抱怨要更
  • 竞争条件和 Clojure Atoms

    clojure atom 的文档指出 Changes to atoms are always free of race conditions 然而 竞争条件不仅是根据更改定义的 而且是在不同线程中并行逻辑操作的上下文中定义的 我想知道 保证
  • 如何解构向量以用作函数参数

    在 Python 中 您可以将列表或元组传递给函数并让函数解压参数 我怎样才能在 Clojure 中做到这一点 下面是一些 Python 代码示例 def f a b c d print a a print b b print c c pr
  • Clojure 的分析工具?

    有谁知道 Clojure 有一个好的分析工具或库吗 我更喜欢可以从 REPL 中使用的东西 类似于 with profiling 过去是在 Allegro Common Lisp 中 有什么类似的事情吗 或者您是否有过与 Clojure 配
  • Clojure 尾递归与质因数

    我正在尝试自学 clojure 并使用 Prime Factors Kata 和 TDD 的原则来实现这一目标 通过一系列 Midje 测试 如下所示 fact primefactors 1 gt list fact primefactor
  • 将嵌套映射分解为键值对

    我想将 Clojure 中的嵌套映射分解为一系列键值对 例如 我们有这张地图 a b c d e f g h i j 分解后的地图应如下所示 a b c d e f g h i j d e f g h e f g h i j 输出的顺序并不
  • 在 Clojure 中处理两个序列中的值对

    我正在尝试加入 Clojure 社区 我经常使用 Python 我广泛使用的功能之一是 zip 方法 用于迭代值对 在 Clojure 中是否有一种 聪明且简短的 方法可以实现相同的目标 另一种方法是简单地将 map 与一些按顺序收集其参数

随机推荐