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

欢迎!请查看关于页面获取更多关于如何使用本站的信息。

0
打印

我注意到在pprint中有多个地方使用了refs和dosync事务,这看起来似乎是不必要的。鉴于打印通常在单个线程中发生,这似乎可以使用atoms或甚至是volatile替换。这可能会显著提高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 µs
    执行时间标准差:597.958933 ns
   执行时间下四分位数:9.631444 µs ( 2.5%)
   执行时间上四分位数:11.618551 µs (97.5%)
                   总开销:1.724553 ns


补丁后


评估次数:6000900,在60次样本中的100015次调用。
             平均执行时间:10.212543 µs
    执行时间标准差:564.874941 ns
   执行时间下四分位数:9.528383 µs ( 2.5%)
   执行时间上四分位数:11.334033 µs (97.5%)
                   总开销:1.827143 ns


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