Zur*_*iar 3 concurrency multithreading clojure
我有以下代码:
(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)))
Run Code Online (Sandbox Code Playgroud)
每个'gen-x-part'函数都是cpu密集型的.据我了解,let表单将在单个线程上串行运行这些计算.如果我有一个核心机器,那么在它自己的线程上运行它们就没有意义,因为它们都是cpu绑定的.但是,我有一台4芯机器.如何利用每个核心并将这些功能分配到自己的核心?谢谢.
Pio*_*dyl 10
您可以将CPU密集型函数包装成futures:
(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)))
Run Code Online (Sandbox Code Playgroud)
它将使它们在单独的线程中运行.@a意味着(deref a)将阻止直到结果可用.
如果您的函数处理更大的Clojure数据集,您也可以查看pmap.
| 归档时间: |
|
| 查看次数: |
506 次 |
| 最近记录: |