簡體   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