过去我使用性能分析工具,如 nprof、Equatec 分析器和 Yourkit 分析器来识别和消除/减少主要在一个线程(序列化执行)中运行的代码中的性能瓶颈。现在我写了很多多线程代码,这些代码可能会因锁争用而变慢;可以使用哪些工具和技巧来确定发生锁争用的位置以及发生的程度?
试试英特尔的ThreadChecker。它适用于 Windows 和 Linux。如果您在 Windows 上工作,请尝试 Parallel Studio。它提供了一个易于使用的锁定等待分析器。它显示了运行时的总体并发性,这给出了锁争用和并发性差的提示。这些工具现在正在做你想做的事。
对于在 Windows 上开发,软件验证有一些(http://www.softwareverify.com/thread.html).
对于 C、C++、Delphi,请尝试线程验证器。
对于 Java,还有 Java Thread Validator。
还有 Python 和 Ruby 的实验版本。