2013-10-14 22 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特別對標準庫中的其他併發模型也有很好的支持。 –

相關問題