【问题标题】:What is meant by "fast-path" uncontended synchronization?“快速路径”非竞争同步是什么意思?
【发布时间】:2013-09-01 14:39:21
【问题描述】:

来自JCIP book 的性能和可扩展性一章:

同步机制针对非竞争性进行了优化 case(volatile 总是无争议的),在撰写本文时, “快速路径”非竞争同步范围的性能成本 大多数系统的时钟周期为 20 到 250 个。

作者这里的fast-path无竞争同步是什么意思?

【问题讨论】:

标签: java concurrency synchronization volatile


【解决方案1】:

这里有两个不同的概念。

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

慢速路径与快速路径代码

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

对于 HotSpot VM,slow-path code 是由 C++ 实现生成的二进制代码,其中 fast-path code 表示由 JIT 编译器生成的代码。

在一般意义上,快速路径代码更加优化。全面了解JIT编译器wikipedia is a good place to start。

非竞争和竞争同步

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

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

  1. 未锁定的监视器(所有权变得紧张)
  2. 监视器已由同一线程拥有

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

回答问题

作者fast-path 无竞争同步的意思是,在最便宜的场景(无竞争同步)中最快的字节码翻译(fast-path)。

【讨论】:

    【解决方案2】:

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

    我假设这本书是在讨论 Java 的 synchronized 块/限定符。在这种情况下,快速路径很可能是很容易检测到没有其他线程访问相同数据的路径。那么,这本书的意思是,synchronized 的实现已经过优化,以在只有一个线程实际使用对象的情况下具有最佳性能,而不是在多个线程并且必须同步的情况下实际上是他们之间的中介。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我不明白这是如何回答fast-path 是什么的问题?如果这里有什么隐含的,你能说清楚吗?
      • 快速路径是单个字段的读写。慢速路径是暂停线程并保存线程上下文。
      猜你喜欢
      • 2022-09-28
      • 2010-11-08
      • 1970-01-01
      • 2018-07-27
      • 2012-03-12
      • 1970-01-01
      • 2023-04-06
      • 2019-05-11
      相关资源
      最近更新 更多