1
我想知道爲什麼來自core.async通道的數據是由無限循環中的拉機制檢索到的。例如:拉而不是推core.async渠道?
user=> (def c (chan 1))
#'user/c
user=> (go-loop []
(let [x (<! c)]
(println "Got a value in this loop:" x))
(recur))
#<ManyToManyChannel [email protected]>
編號:https://clojuredocs.org/clojure.core.async/go-loop#example-542c88e3e4b05f4d257a297b
爲什麼沒有推機制,我可以鉤住?或者爲什麼不是這樣的循環core.async訂戶的一些實現細節? 我認爲有一個無休止的運行機制是非常消耗CPU的。這不是這種情況嗎?
「勇敢而真實的Clojure」在[master.async]與master併發進程(http://www.braveclojure.com/core-async/)上有一段精彩的章節,詳細解釋了這一點。 – schaueho