Asynchronous 是Clojure';s core.async类似于Jane Street';s OCaml核心异步?

Asynchronous 是Clojure';s core.async类似于Jane Street';s OCaml核心异步?,asynchronous,clojure,ocaml,clojurescript,core.async,Asynchronous,Clojure,Ocaml,Clojurescript,Core.async,在这篇文章中,作者写道: 然而,Grenchman是基于Jane Street的核心库和异步库构建的,Jane Street是OCaml最大的工业用户之一。Async允许一元伪并发,避免了其他事件驱动工具的许多回调问题,但它是相当单一的 在J上,他们将其描述为: 特别是,我们认为Async在控制程序的并发性方面做得更好,从而更容易对可能的争用条件进行推理 我的问题是-OCaml中的和核心异步之间有相似之处吗?我这样问是因为“避免回调问题的伪并发”听起来与Clojure中core.async的应用

在这篇文章中,作者写道:

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

在J上,他们将其描述为:

特别是,我们认为Async在控制程序的并发性方面做得更好,从而更容易对可能的争用条件进行推理


我的问题是-OCaml中的和核心异步之间有相似之处吗?我这样问是因为“避免回调问题的伪并发”听起来与Clojure中core.async的应用程序非常相似

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

另一方面,Jane Street的异步概念在这句话中总结如下:

简而言之,其思想是使用非抢占式用户级线程 和一级阻塞操作,阻塞表示为 类型系统

它使用特殊类型
Deferred.t
来传递异步计算的结果,这与Clojure futures比与Channel更相似。它还完全避开操作系统线程,而是使用用户线程,而
core.async
确实使用操作系统线程(至少如果它们可用的话)


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

如果我是新来者,您推荐哪一个优于另一个?@BlueTrin:因为其中一个是OCaml库,另一个是用于Clojure的,我建议您根据您更熟悉的语言/具有您需要的其他功能或库(除了并发支持)来选择。对于好的高级并发库,这两种库都可以完成这项工作,尽管Clojure特别支持标准库中的其他并发模型。