有没有办法轮询 Clojure 的 STM 事务是否正在重试,以及重试的速率是多少?
您可以观察history count
一个 ref 将表明存在争用:
user=> (def my-ref (ref 0 :min-history 1))
#'user/my-ref
user=> (ref-history-count my-ref)
0
user=> (dosync (alter my-ref inc))
1
user=> (ref-history-count my-ref)
1
历史计数并不直接代表争用。相反,它表示为了服务并发读取而维护的过去值的数量。
历史记录的大小受限于min
and max
价值观。默认情况下这些是0
and 10
分别,但您可以在创建时更改它们ref
(往上看)。自从min-history
is 0
默认情况下,您通常不会看到ref-history-count
返回非零值,除非引用存在争用。
查看更多讨论history count
here: https://groups.google.com/forum/?fromgroups#!topic/clojure/n_MKCoa870o https://groups.google.com/forum/?fromgroups#!topic/clojure/n_MKCoa870o
我认为没有任何办法,由clojure.core
,观察此时STM交易的速率。你当然可以做类似@Chouser 在他的作品中所做的事情历史压力测试 https://gist.github.com/Chouser/456326:
(dosync
(swap! try-count inc)
...)
即在交易内增加一个计数器。每次尝试交易时都会发生增量。如果try-count
大于1
,事务已重试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)