haw*_*eye 8 ocaml asynchronous clojure clojurescript 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期货而非渠道.它还完全避开操作系统线程并使用用户线程代替,而core.async确实使用操作系统线程(至少如果它们可用).
编辑:经过一些进一步的调查,两个库的重点在于提供组合多个阻塞操作的方法,而不会占用操作系统线程.Async还Deferred.t通过Pipe模块提供(除此之外)通道.