gpt4 book ai didi

concurrency - 是否有用于并行调度多个表达式的 Clojure 习惯用法

转载 作者:行者123 更新时间:2023-12-04 18:09:26 24 4
gpt4 key购买 nike

我在一个向量中保存了许多(未计算的)表达式; [ expr1 expr2 expr3 ... ]

我希望做的是将每个表达式交给一个单独的线程,然后等待一个返回值。那时我对其他线程的结果不感兴趣,想取消它们以节省 CPU 资源。

(我意识到这可能会导致不确定性,因为程序的不同运行可能会导致首先评估不同的表达式。我手头有这个。)

是否有实现上述目标的标准/惯用方法?

最佳答案

这是我的看法。

基本上,您必须在每个 future 中解析一个全局 promise ,然后返回一个包含 future 列表和解析值的向量,然后取消列表中的所有 future :

(defn run-and-cancel [& expr]
(let [p (promise)
run-futures (fn [& expr] [(doall (map #(future (deliver p (eval %1))) expr)) @p])
[fs res] (apply run-futures expr)]
(map future-cancel fs)
res))

关于concurrency - 是否有用于并行调度多个表达式的 Clojure 习惯用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18315034/

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