来自JCIP book的性能和可伸缩性章节:
同步机制针对无竞争优化进行了优化 case(volatile总是无条件的),在写这篇文章的时候 “快速路径”无竞争同步范围的性能成本 大多数系统的时钟周期为20到250个。
作者在这里通过快速路径无竞争同步意味着什么?
答案 0 :(得分:19)
这里有两个截然不同的概念。
慢速路径与快速路径代码
这是识别机器特定二进制代码的生产者的另一种方法。
使用HotSpot VM,慢速路径代码是由C ++实现生成的二进制代码,其中快速路径代码表示由JIT编译器生成的代码。
从一般意义上讲,快速路径代码更加优化。完全理解JIT编译器wikipedia is a good place to start。
无争议和争用同步
Java的同步构造(Monitors)具有所有权的概念。当一个线程试图锁定(获得所有权)监视器时,它可以被锁定(由另一个线程拥有)或解锁。
无争议的同步发生在两种不同的场景中:
另一方面,争用同步意味着线程将被阻塞,直到所有者线程释放监视器锁。
回答问题
通过快速路径无竞争同步,作者意味着,在最便宜的场景中最快的字节码转换(快速路径)(无竞争同步)。
答案 1 :(得分:8)
我不熟悉本书的主题,但一般来说,“快速路径”是一个特定的可能控制流分支,它比其他分支明显更有效,因此是首选,但无法处理复杂的情况。
我认为这本书正在谈论Java的synchronized
块/限定符。在这种情况下,快速路径很可能是容易检测到没有其他线程访问相同数据的路径。那么,本书所说的是synchronized
的实现已被优化,以便在只有一个线程实际使用该对象的情况下具有最佳性能,而不是多线程的情况和同步必须实际调解它们之间。
答案 2 :(得分:2)
获取同步锁定的第一步是单个易失性写入(监视所有者字段)。如果锁是无争议的,那就是将要发生的一切。
如果锁定有争议,那么将会有各种上下文切换和其他机制,这将增加时钟周期。