【发布时间】:2014-05-13 11:56:38
【问题描述】:
我有一个二叉搜索树的无等待实现,但我无法找出衡量线程争用的具体方法。这里的争用是指尝试同时访问同一块内存的线程数。
到目前为止,我已经搜索了 ThreadMXBean 和 ThreadInfo 类,但是由于没有涉及到锁,所以我还没有找到任何解决方案。
【问题讨论】:
-
看看执行并发更新的方法使用了多少CPU时间。没有争用,CAS 几乎不需要时间……
-
我已经测量了每个线程的 CPU 时间,但这似乎并没有让我知道争用。但是您的评论使我找到了一种衡量争用的有趣方法。最大和最小线程 CPU 时间之间的差异应该让我知道延迟总是由于争用!
-
lock free(又名wait free)算法的关键在于它们不包含等待操作。唯一可能发生的情况是必须重复更新操作,因为并发更新干扰了更新。与任何其他操作一样,重复将消耗 100% 的 CPU 时间。这里衡量争用的唯一方法是衡量重复次数。除非算法实现记录自己重试,否则您必须测量更新操作的 CPU 时间(这将引发争用)并将其与整体线程执行时间进行比较。
标签: java multithreading performance contention