【问题标题】:Is Clojure's core.async similar to Jane Street's OCaml Core Async?Clojure 的 core.async 是否类似于 Jane Street 的 OCaml Core Async?
【发布时间】:2013-10-22 13:50:22
【问题描述】:

作者在blog post 中写道:

但是,Grenchman 是基于 Jane Street 的 Core 和 Async 库构建的,Jane Street 是 OCaml 的最大工业用户之一。异步允许单子伪并发,避免了其他事件驱动工具的许多回调问题,但它相当单一。

在 Jane Street Documentation Page for Core Async 上,他们将其描述为:

特别是,我们认为 Async 可以更好地控制程序的并发性,从而更容易推断可能的竞争条件。

我的问题是 - core.async in Clojure 和 OCaml 中的 Core Async 之间有相似之处吗?我问是因为“避免回调头痛的虚假并发”听起来与 Clojure 中 core.async 的应用非常相似。

【问题讨论】:

    标签: asynchronous clojure ocaml clojurescript core.async


    【解决方案1】:

    我无法发现主要的相似之处。 Clojure 的 core.async 的概念似乎主要基于 Go 的并发模型 - 许多名称都是相同的,比如通信通道,甚至是用于异步执行代码的 go 宏,比如 Go 语言本身命名的关键字为。

    另一方面,Jane Street 的 Async 的概念总结在这句话来自the introductory documentation

    简而言之,这个想法是使用非抢占式用户级线程 和一级阻塞操作,阻塞表示在 类型系统。

    它使用特殊类型Deferred.t 来传达异步计算的结果,这更类似于 Clojure 期货而不是通道。它还完全避开了操作系统线程并使用了用户线程,而core.async 确实使用了操作系统线程(至少如果它们可用的话)。

    编辑:经过进一步调查,两个库有一个明显的相似之处,即两个库都专注于提供组合多个阻塞操作而不占用操作系统线程的方法。 Async 还通过Pipe 模块提供(除了Deferred.t)通道。

    【讨论】:

    • 如果我是新人,有没有比其他人更推荐的?
    • @BlueTrin:因为一个是 OCaml 库,一个是用于 Clojure 的,我建议根据您更熟悉/具有其他功能或库的任何语言进行选择(除了并发支持)你需要的。对于优秀的高级并发库,这两者都可以胜任,尽管 Clojure 对标准库中的其他并发模型也有很好的支持。
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 2014-06-14
    相关资源
    最近更新 更多