是否可以在Clojure中使用ClojureScript的基於狀態機的core.async實現,而不是Clojure的基於線程的實現?我希望能夠在JVM上使用core.async,但不使用線程。Clojure中可以使用ClojureScript的core.async實現嗎?
回答
這目前不可能,但沒有什麼能阻止你修改core.async來支持單線程模型。所有調度都通過clojure.core.async.impl.dispatch/run
進行處理。更改該功能以使用某種其他調度方法,並且事情應該正常工作。 core.async的ClojureScript版本有dispatch/run
的不同版本,它使用setTimeout(或其他可能更快的事情)。複製該代碼,並將其修改爲適用於您的虛擬機,並且不應該那麼難。
沒有辦法以嚴格的單線程方式在JVM上使用core.async,除非您願意進入內部並將用於go
的線程池替換爲僅使用單線程的線程池。
但是,正如edbond在他的評論中指出的那樣,core.async的Clojure版本確實使用狀態機來處理go
。然後,這些狀態機運行於線程池中的線程上,線程池的大小限制爲處理器數量的兩倍+ 42,因此可以在不使用盡可能多的實際線程的情況下啓動數千個go
。
的JVM core.async還提供了一個thread
宏,就像go
,但真正啓動線程,加上雙響操作(>!!
<!!
等)工作,像他們的單爆炸同行的集合,但在阻擋時尚。你是否使用它取決於你;如果您堅持使用go
以及單一操作系列操作,core.async將永遠不會啓動超出上述線程池限制的任何線程。
起初,我以爲'42'是一個可愛的笑話答案的目的,但後來我檢查了[代碼](https://github.com/clojure/core.async/blob/76b25bf91c670b0c3542ed9cb687ff29fb2183a7/src/main/clojure/clojure/core/async/impl/exec/threadpool .clj#L21),看到它真的是一個可愛的笑話。 :-) – Shepmaster
- 1. core.async的pub/sub表現在庵(clojurescript)奇
- 2. 可以通過Clojure實現Arc嗎?
- 3. clojurescript中core.async的優點是什麼?
- 4. 您可以在同一個項目中混合使用ClojureScript和JVM-Clojure嗎?
- 5. Clojure - 使用與Yada/Aleph的core.async頻道
- 6. 使用Clojure的節流進程core.async
- 7. 使用Clojure/ClojureScript交叉庫
- 8. 我可以在Nginx中使用Clojure嗎?
- 9. Clojure的core.async線程塊
- 10. 擴展clojure的功能core.async
- 11. core.async是否可以通過序列實現它的功能?
- 12. 我可以使用增強現實嗎?
- 13. 可以使用django實現Numpy嗎?
- 14. 可以使用「call/cc」實現「if」嗎?
- 15. Clojure - core.async接口爲apache kafka
- 16. 我可以在clojure 1.2 master分支中使用swank-clojure嗎?
- 17. 用於數據計算的Clojure core.async
- 18. 如何理解clojure中的alt core.async
- 19. clojure + clojurescript項目結構最佳實踐
- 20. Clojure的core.async與Jane Street的OCaml Core Async類似嗎?
- 21. ClojureScript的設計和實現
- 22. 在clojurescript中實現ajax調用
- 23. clojure和clojurescript的區別?
- 24. 我可以在MS.Net framework 4.0中使用SqlClient的Mono實現嗎?
- 25. 與clojure和clojurescript中的「take」的區別?
- 26. 可以用Twitter Bootstrap實現Modernizr嗎?
- 27. InfoView中可以實現VideoView嗎?
- 28. 可以在Xamarin.Android中實現android.support.v7.util.sortedlist嗎?
- 29. 使用core.async(ClojureScript)停止事件傳播的慣用方法是什麼?
- 30. Clojure可以從現有流程中捕捉標準嗎?
(go)在clj中也使用狀態機實現。請參閱doc(去)和來源https://github.com/clojure/core.async/blob/56ded53243e1ef32aec71715b1bfb2b85fdbdb6e/src/main/clojure/clojure/core/async.clj#L356 – edbond
當然,但我指的是ClojureScript使用狀態機來代替線程,而不是Clojure實現中沒有狀態機。 – exupero
我很好奇 - 爲什麼你想避免使用線程? – Shepmaster