【发布时间】:2012-09-07 01:48:39
【问题描述】:
我有两个独立的昂贵功能。我想并行运行它们。我不想处理期货之类的事情(我是 Clojure 的新手,很容易混淆)。
我正在寻找一种同时运行两个函数的简单方法。我希望它像下面这样工作
(defn fn1 [input] ...) ; costly
(defn fn2 [input] ...) ; costly
(let [[out1 out2] (conc (fn1 x) (fn2 y))] ...)
我希望它返回一个带有一对输出的向量。它应该只在两个线程都终止后才返回。理想情况下, conc 应该适用于任意数量的输入。我怀疑这是一个简单的模式。
【问题讨论】:
-
当您说您不想处理期货时,是否意味着您也不想在“conc”函数中使用期货?据我所知,在这种情况下使用 Clojure 并发原语之一是惯用的,尽管它们可以通过封装在“conc”中对您隐藏。
-
肯定会用到一些并发原语。 conc 可以随心所欲。我只是不想以用户的身份与他们打交道。我怀疑这是“为每个输入开始一个未来”,“等待每个输出”,“返回”。也许它必须是一个宏,不确定。
-
如果您想将参数的评估推迟到线程,那么绝对是一个宏。我现在正在处理宏定义。
标签: concurrency clojure future