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

欢迎!请查看关于页面,了解更多关于此功能的信息。

0
Clojure

我之前使用VisualVM找到代码瓶颈效果不错。但现在它显示所有的时间都花在LockingTransaction中。在事务中获得性能结果的技巧有哪些?

profileTransaction.png gist

1 答案

0

选择
 
最佳答案

我不确定是否有好的方法真正看到事务内的细节。事务通常应该尽可能简单,因为它们是关键部分,可能需要重试,所以我通常更关注像ref更新的竞争等问题,为此您可能想要使用不同的分析技术(寻找等待/停滞的线程等)。

如果我在这个阶段,我会尝试使用我的大脑工具来思考什么工作/竞争可以从不关键部分拉出来,或者如果引用可以被解缠,那么协调就不需要了。

如果您想分享更多关于引用或事务代码的信息,那可能有助于激发这些想法。

谢谢Alex!确实需要使用braintool!我能给出的最简单的描述是它遵循Rich Hickey的蚁模拟代码(参见https://github.com/ilmotta/clojure-ants-simulation/blob/master/README.org)。我已经尽量将代码保持在`dosync`循环内部很小,通常只包含`alter`语句。但至少在使用VisualVM时,我也无法判断哪一个是哪个`dosync`的事务(有几个)在消耗时间。
...