2013-10-14 24 views
8

在此blog post作者写道:Clojure的core.async与Jane Street的OCaml Core Async类似吗?

然而,Grenchman是建立在从珍街,OCaml中的最大的工业用户的一个核心和异步库。异步允许单点人造并发,避免了其他事件驱动工具的许多回调麻烦,但它相当单一。

在J ane Street Documentation Page for Core Async他们形容为:

特别是,我们认为异步确实控制程序的并发性,使其更容易推理可能的竞争条件更好。

我的问题是 - 在0123am和OCaml中的核心异步之间是否有相似之处?我问,因为“避免回调头痛的虚假并发”听起来与Clojure中core.async的应用非常相似。

回答

8

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

简街的异步的,另一方面这个概念被总结在这句话从the introductory documentation

概括地说,这个想法是使用非抢占用户级线程 和一流的阻塞在 类型系统中表示阻塞的操作。

它使用特殊类型Deferred.t与Clojure期货进行异步计算的结果进行通信。它也完全避开操作系统线程,并使用用户线程代替,而core.async确实使用操作系统线程(至少如果它们可用)。

编辑:经过一些进一步的调查,有一个明显的相似之处在于,两个库的重点在于提供用于组合多个阻塞操作而不捆绑OS线程的方法。异步还通过Pipe模块提供(除了Deferred.t)通道。

+0

如果我是一个新人,有没有比另一个更推荐? – BlueTrin

+1

@BlueTrin:因为一个是OCaml库,另一个是Clojure库,所以我建议根据你更喜欢的任何语言来选择/具有你需要的其他功能或库(除了并发支持)。对于优秀的高级并发库,这两者都可以完成这项工作,尽管Clojure特别对标准库中的其他并发模型也有很好的支持。 –

相关问题