我有一个二叉搜索树的无等待实现,但我无法找出衡量线程争用的具体方法。通过争用,这里我的意思是尝试同时访问同一块内存的线程数。

到目前为止,我已经搜索了 ThreadMXBean 和 ThreadInfo 类,但由于没有涉及锁,我还没有找到任何解决方案。

最佳答案

如果没有过高的性能成本,就无法衡量对“内存位置”的争用。直接测量(例如,正确同步计数器包装所有访问)将引入人为瓶颈,这将破坏测试可靠性。

“同一时间”在您想要测量的范围内有松散的定义,因为在给定时间内只有一个 CPU“拥有”内存中的特定位置。在这种情况下,您可以做的最好的事情是测量 CPU 处理内存冲突的速率,例如通过硬件计数器。这样做需要了解给定平台上的内存子系统。此外,机器(= CPU)状态的硬件计数器属性,而不是内存状态;换句话说,您可以估计特定指令经历了多少冲突,而不是有多少 CPU 访问了给定的内存位置。

关于java - 测量无等待多线程 Java 程序中的争用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23630597/

10-12 06:03