clojure未来与延迟

roh*_*hit 3 future core clojure delay

我一直在阅读Clojure编程并找到了文本

(defn get-document [id]
; ... do some work to retrieve the identified document's metadata ... {:url "http://www.mozilla.org/about/manifesto.en.html"
:title "The Mozilla Manifesto"
:mime "text/html"
:content (delay (slurp "http://www.mozilla.org/about/manifesto.en.html"))})
Run Code Online (Sandbox Code Playgroud)

如果呼叫者可能总是需要该数据,则替换未来延迟的变化可以证明是吞吐量的显着改善.

我没有完全掌握这一部分,有人可以解释一下.

小智 6

简单的回答future是身体的背景执行,delay是按需执行身体.示例:如果您有100个delay代码的列表,并尝试循环它 - 代码将在评估每个列表项时阻塞(例如,执行HTTP请求),并且第一次迭代将很慢.与future-d代码相同- 它将评估后台线程中的所有内容,结果将立即在您的循环中可用.

经验法则 - 如果很有可能根本不需要某些或大部分内容 - 请使用delay,否则请使用future.

https://clojuredocs.org/clojure.core/delay https://clojuredocs.org/clojure.core/future