为什么我的传感器功能比使用 ->> 运算符慢?
Why is my transducer function slower than using ->> operator?
在解决来自 Hackkerank (https://www.hackerrank.com/challenges/string-compression/problem) 的问题时,我编写了 2 个带有和不带有传感器的实现。
我期待传感器实现比函数链接运算符更快->>
。不幸的是,根据我的迷你基准测试,链接运算符的性能优于转换器 2.5 倍。
我在想,我应该尽可能使用换能器。还是我没有正确理解换能器的概念?
时间:
"Elapsed time: 0.844459 msecs"
"Elapsed time: 2.697836 msecs"
代码:
(defn string-compression-2
[s]
(->> s
(partition-by identity)
(mapcat #(if (> (count %) 1)
(list (first %) (count %))
(list (first %))))
(apply str)))
(def xform-str-compr
(comp (partition-by identity)
(mapcat #(if (> (count %) 1)
(list (first %) (count %))
(list (first %))))))
(defn string-compression-3
[s]
(transduce xform-str-compr str s))
(time (string-compression-2 "aaabccdddd"))
(time (string-compression-3 "aaabccdddd"))
根据Criterium:
,换能器版本似乎确实更快
(crit/quick-bench (string-compression-2 "aaabccdddd"))
Execution time mean : 6.150477 µs
Execution time std-deviation : 246.740784 ns
Execution time lower quantile : 5.769961 µs ( 2.5%)
Execution time upper quantile : 6.398563 µs (97.5%)
Overhead used : 1.620718 ns
(crit/quick-bench (string-compression-3 "aaabccdddd"))
Execution time mean : 2.533919 µs
Execution time std-deviation : 157.594154 ns
Execution time lower quantile : 2.341610 µs ( 2.5%)
Execution time upper quantile : 2.704182 µs (97.5%)
Overhead used : 1.620718 ns
正如 coredump 评论的那样,一个样本量不足以说明一种方法是否通常比另一种方法更快。
在解决来自 Hackkerank (https://www.hackerrank.com/challenges/string-compression/problem) 的问题时,我编写了 2 个带有和不带有传感器的实现。
我期待传感器实现比函数链接运算符更快->>
。不幸的是,根据我的迷你基准测试,链接运算符的性能优于转换器 2.5 倍。
我在想,我应该尽可能使用换能器。还是我没有正确理解换能器的概念?
时间:
"Elapsed time: 0.844459 msecs"
"Elapsed time: 2.697836 msecs"
代码:
(defn string-compression-2
[s]
(->> s
(partition-by identity)
(mapcat #(if (> (count %) 1)
(list (first %) (count %))
(list (first %))))
(apply str)))
(def xform-str-compr
(comp (partition-by identity)
(mapcat #(if (> (count %) 1)
(list (first %) (count %))
(list (first %))))))
(defn string-compression-3
[s]
(transduce xform-str-compr str s))
(time (string-compression-2 "aaabccdddd"))
(time (string-compression-3 "aaabccdddd"))
根据Criterium:
,换能器版本似乎确实更快(crit/quick-bench (string-compression-2 "aaabccdddd"))
Execution time mean : 6.150477 µs
Execution time std-deviation : 246.740784 ns
Execution time lower quantile : 5.769961 µs ( 2.5%)
Execution time upper quantile : 6.398563 µs (97.5%)
Overhead used : 1.620718 ns
(crit/quick-bench (string-compression-3 "aaabccdddd"))
Execution time mean : 2.533919 µs
Execution time std-deviation : 157.594154 ns
Execution time lower quantile : 2.341610 µs ( 2.5%)
Execution time upper quantile : 2.704182 µs (97.5%)
Overhead used : 1.620718 ns
正如 coredump 评论的那样,一个样本量不足以说明一种方法是否通常比另一种方法更快。