gpt4 book ai didi

concurrency - Clojure 中的死简单 Fork-Join 并发

转载 作者:行者123 更新时间:2023-12-04 14:15:56 25 4
gpt4 key购买 nike

我有两个独立的昂贵函数。我想并行运行它们。我不想处理 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])

请注意,我解构了 out1out2试图保留您的示例。

关于concurrency - Clojure 中的死简单 Fork-Join 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12415316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com