gpt4 book ai didi

multithreading - 如何利用 Clojure 中的所有 CPU 内核

转载 作者:行者123 更新时间:2023-12-01 08:25:56 24 4
gpt4 key购买 nike

我有以下代码:

(defn compile-report [id]
(let [a (gen-first-part id)
b (gen-second-part id)
c (gen-third-part id)
d (gen-fourth-part id)]

(conj a b c d)))

每个“gen-x-part”函数都是 CPU 密集型的。据我了解, let 表单将在单个线程上连续运行这些计算。如果我有一个单核机器,那么在它自己的线程上运行每个都是没有意义的,因为它们都是 cpu-bound。但是,我有一台 4 核机器。我怎样才能利用这些核心中的每一个并将这些功能中的每一个分派(dispatch)到它自己的核心?谢谢。

最佳答案

您可以将 CPU 密集型函数封装到 future年代:

(defn compile-report [id]
(let [a (future (gen-first-part id))
b (future (gen-second-part id))
c (future (gen-third-part id))
d (future (gen-fourth-part id))]

(conj @a @b @c @d)))

这将使它们在单独的线程中运行。 @a 表示 (deref a) 将阻塞直到结果可用。

如果您的函数处理更大的 Clojure 数据集,您还可以查看 pmap .

关于multithreading - 如何利用 Clojure 中的所有 CPU 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35779334/

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