"快速路径"无竞争同步是什么意思?

Gee*_*eek 10 java concurrency synchronization volatile

JCIP书性能和可伸缩性章节:

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

作者在这里通过快速路径无竞争同步意味着什么?

Joã*_*elo 20

这里有两个截然不同的概念.

  1. 快速路径和慢速路径代码
  2. 无争议和争用同步

慢路径与快速路径代码

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

使用HotSpot VM,慢速路径代码是由C++实现生成的二进制代码,其中快速路径代码表示由JIT编译器生成的代码.

一般而言,快速路径代码更加优化.要完全理解JIT编译器,维基百科是一个很好的起点.

无争议和争用同步

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

无争用的同步发生在两种不同的场景中:

  1. 解锁监视器(所有权获得了通过)
  2. Monitor已由同一个线程拥有

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

回答这个问题

通过快速路径无竞争同步,作者意味着,在最便宜的场景中最快的字节码转换(快速路径)(无竞争同步).


Kev*_*eid 8

我不熟悉本书的主题,但一般来说,"快速路径"是一个特定的可能控制流分支,它比其他分支明显更有效,因此是首选,但不能处理复杂的情况.

我假设这本书正在讨论Java的synchronized块/限定符.在这种情况下,快速路径很可能是容易检测到没有其他线程访问相同数据的路径.那本书所说的是,synchronized在只有一个线程实际使用该对象的情况下,已经优化了实现以获得最佳性能,而不是多线程的情况,并且同步必须实际调解他们.