[英]Does Scala Async do everything that Clojure's core.async does?
[英]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.