Performance 为什么Clojure减速机r/fold不能提供性能优势?

Performance 为什么Clojure减速机r/fold不能提供性能优势?,performance,clojure,fold,reducers,Performance,Clojure,Fold,Reducers,我想知道为什么下面的代码在r/fold的情况下不提供加速?我对减速机有什么误解吗 我在一个非常慢(虽然有两个内核)的Ubuntu 12.04开发盒上运行它,都是通过emacs和lein运行的,每个都有相同的结果 (require '[clojure.core.reducers :as r]) (.. Runtime getRuntime availableProcessors) ;;二, “运行时间:26076.434324毫秒” “运行时间:25500.234034毫秒” 谢谢。您正在折叠

我想知道为什么下面的代码在r/fold的情况下不提供加速?我对减速机有什么误解吗

我在一个非常慢(虽然有两个内核)的Ubuntu 12.04开发盒上运行它,都是通过emacs和lein运行的,每个都有相同的结果

(require '[clojure.core.reducers :as r])
(.. Runtime getRuntime availableProcessors)
;;二,

“运行时间:26076.434324毫秒”
“运行时间:25500.234034毫秒”


谢谢。

您正在折叠一个序列。平行折叠现在只在持久性向量和映射上发生

还有各种各样的原因说明这种性能测试不如使用类似的测试,但这可能是另一个单独的讨论。(其中一些原因是垃圾收集、JVM预热和内联、Emacs和lein上时髦的默认JVM设置、装箱和检查数学等。)

由于上述许多原因仍然是错误的,但比较起来更有用:

(require '[clojure.core.reducers :as r])
(def v (vec (range 800000)))
(dotimes [_ 100] (time (reduce + v)))
(dotimes [_ 100] (time (r/fold + v)))
观看最后两次跑步的最佳时刻

(require '[clojure.core.reducers :as r])
(def v (vec (range 800000)))
(dotimes [_ 100] (time (reduce + v)))
(dotimes [_ 100] (time (r/fold + v)))