2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多关于工作原理的信息。

0
打印

我注意到pprint在多个位置使用refs和dosync事务,这似乎不是必要的。鉴于打印通常在单个线程中发生,这似乎可以用atoms替换,或者甚至用volatiles。这可能会显著提高pprint的性能。

2个答案

0
_评论者:killme2008_

我编写了一个补丁来修复此问题。我在clojure和clojure.data.json中运行了所有测试,没有失败的。

使用criterium进行以下简单基准测试:


(use 'criterium.core)
(require '[clojure.data.json :as json])
(bench (json/write-str
  {:a 1 :b 2 :c (range 10) :d "hello world"
   :e (apply hash-set (range 10))}))


补丁前


评估次数:6180060次,在60个样本中,每个样本调用次数为103001次。
    平均执行时间:10.302604微秒
执行时间标准差:597.958933纳秒
执行时间下限四分位数:9.631444微秒(2.5%)
执行时间上限四分位数:11.618551微秒(97.5%)
    使用的开销:1.724553纳秒


补丁后


评估次数:6000900次,在60个样本中,每个样本调用次数为100015次。
    平均执行时间:10.212543微秒
执行时间标准差:564.874941纳秒
执行时间下限四分位数:9.528383微秒(2.5%)
执行时间上限四分位数:11.334033微秒(97.5%)
       使用的开销:1.827143纳秒


0
参考:https://clojure.atlassian.net/browse/CLJ-1799(由alexmiller报告)
...