13

JCIP 书的性能和可扩展性一章:

同步机制针对无竞争的情况进行了优化(易失性始终是无竞争的),在撰写本文时,对于大多数系统来说,“快速路径”无竞争同步的性能成本范围为 20 到 250 个时钟周期。

作者这里的快速路径无竞争同步是什么意思?

4

3 回答 3

25

这里有两个不同的概念。

  1. 快路径和慢路径代码
  2. 非竞争和竞争同步

慢路径与快速路径代码

这是识别机器特定二进制代码的生产者的另一种方法。

对于 HotSpot VM,慢路径代码是由 C++ 实现生成的二进制代码,而快速路径代码是指由 JIT 编译器生成的代码。

一般来说,快速路径代码要优化得多。要全面了解 JIT 编译器,维基百科是一个很好的起点

非竞争和竞争同步

Java 的同步构造(Monitors)具有所有权的概念。当一个线程试图锁定(获得所有权)监视器时,它可以被锁定(由另一个线程拥有)或解锁。

非竞争同步发生在两种不同的场景中:

  1. 解锁监视器(所有权获得了海峡)
  2. 监视器已由同一线程拥有

另一方面,竞争同步意味着线程将被阻塞,直到所有者线程释放监视器锁。

回答问题

作者所说的快速路径非竞争同步是指在最便宜的场景(非竞争同步)中最快的字节码转换(快速路径)。

于 2014-07-19T16:32:11.417 回答
9

我不熟悉这本书的主题,但一般来说,“快速路径”是一个特定的可能控制流分支,它比其他分支效率高得多,因此是首选,但不能处理复杂的情况。

我假设这本书是在谈论 Java 的synchronized块/限定符。在这种情况下,快速路径很可能是很容易检测到没有其他线程访问相同数据的路径。那么,这本书的意思是,synchronized在只有一个线程实际使用对象的情况下,已经优化了他们。

于 2013-09-01T14:55:07.273 回答
2

获取同步锁的第一步是单个易失性写入(监控所有者字段)。如果锁是无争议的,那么这就是将发生的一切。

如果锁定是有争议的,那么将会有各种上下文切换和其他机制,这将增加时钟周期。

于 2013-09-01T18:18:02.207 回答