我有两个独立的昂贵函数。我想并行运行它们。我不想处理 future 等(我是 Clojure 的新手,很容易混淆)。
我正在寻找一种同时运行两个函数的简单方法。我希望它像下面这样工作
(defn fn1 [input] ...) ; costly
(defn fn2 [input] ...) ; costly
(let [[out1 out2] (conc (fn1 x) (fn2 y))] ...)
我希望它返回一个带有一对输出的向量。它应该只在两个线程都终止后返回。理想情况下, conc 应该适用于任意数量的输入。我怀疑这是一个简单的模式。
最佳答案
在 Clojure 中使用 future 非常容易。无论如何,这是一个避免它们的答案
(defn conc [& fns]
(doall (pmap (fn [f] (f)) fns)))
pmap
在幕后使用 future 。 doall
将强制序列进行评估。(let [[out1 out2] (conc fn1 fn2)]
[out1 out2])
请注意,我解构了
out1
和 out2
试图保留您的示例。
关于concurrency - Clojure 中的死简单 Fork-Join 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12415316/