繁体   English   中英

Clojure的core.async是否类似于Jane Street的OCaml Core Async?

[英]Is Clojure's core.async similar to Jane Street's OCaml Core Async?

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

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

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

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

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

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

另一方面,Jane Street的Async的概念在介绍文档的这句话中进行总结:

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

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

编辑 :经过一些进一步的调查,两个库的重点在于提供组合多个阻塞操作的方法,而不需要占用操作系统线程。 Async还通过Pipe模块提供(除了Deferred.t )通道。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM