2024年Clojure调查问卷中分享您的想法!

欢迎!请查看关于页面以获取更多关于如何使用本站的信息。

0
core.async

当一个let绑定跨越一个阻塞操作使用时,这个绑定就会从let中泄漏出来。

`
(async/go-loop [])

(let [msg (async/<! in-ch)]
  (if msg
    (let [stuff (vec (range 1 100000))]
      (async/<! out-ch stuff)
      (println stuff)
      (recur))
    (recur))))

`

{{stuff}}绑定会卡在状态机状态中。这将在{{recur}}期间持续存在,直到遇到该绑定。

((在我们这个例子中,那时已经积累了几个GB。))

理想情况下,在状态中表示本地变量的字段在变量超出作用域时会被置为null。

2个答案

0

评论由:leonoel 发布

相关:ASYNC-219

0
参考: https://clojure.atlassian.net/browse/ASYNC-223(由 alex+import 报告)
...