8

在这篇文中,作者写道:

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

Core Async 的 Jane Street 文档页面上,他们将其描述为:

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

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

4

1 回答 1

8

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

另一方面,简街的异步的概念是从介绍性文档中总结的这句话:

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

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

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

于 2013-10-14T22:21:55.037 回答