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`的事务(有几个)消耗了时间。
...