我在问这个问题,找出为什么我的运行时计数增加。为什么中止线程数也增加时运行时间计数会增加?
我有一个简单的程序,它有一个引用数字的向量和一群线程同时尝试写入向量中的一个数字。
通过修改向量的大小(在程序中称为直方图),我可以减少中止事务的数量,因为对于较大的向量大小,写入集不会发生冲突。程序中的大小称为“histsize”。
但是,当我减少中止事务的数量时,运行时间会上升!在我的系统中,当我将异常事务的数量从2500减少到300时,运行时间从460毫秒增加到620毫秒。显然,还有其他的东西在起作用,但我似乎无法弄清楚它是什么。
这对我来说绝对没有意义。这是代码...谁能告诉我发生了什么事?
(def histsize 5000)
(def histogram (vec (take histsize (repeatedly #(ref 0)))))
(def abort-counter (atom 0))
(defn inc_alter []
(loop [counter 10000]
(if (zero? counter)
nil
(do
(dosync
(try
(let [index (mod counter histsize)]
(ref-set (histogram index) (inc @(histogram index))))
(catch Throwable t
(do
(swap! abort-counter inc)
(throw t)))))
(recur (dec counter))))))
(defn run-histo []
(let [threads (for [x (range 0 20)] (Thread. #(inc_alter)))]
(do
(time
(do (doall (map #(.start %) threads))
(doall (map #(.join %) threads))))
(println "total aborts: " @abort-counter))))
(run-histo)
我认为你需要看看每个线程正在使用多长时间 - 尝试计算最小值,最大值和平均时间。 (一条线可能比其他线更长)。 –