为什么 Java 中的同步成本很高?

2023-12-26

我对 Java 很陌生,我读到了synchronized在 Java 中“非常昂贵”。我只想知道什么贵,怎么贵?

Thanks.


也许事情并没有你想象的那么糟糕 http://www.coderanch.com/t/462449/Threads-Synchronization/java/does-synchronization-expensive

它曾经很糟糕(这可能就是为什么你读到它“非常昂贵”)。这些模因可能需要很长时间才能消失

同步的成本有多高?

由于涉及缓存刷新和失效的规则,Java 语言中的同步块通常比许多平台提供的临界区设施更昂贵,这些设施通常使用原子“测试和设置位”机器指令来实现。即使程序仅包含在单个处理器上运行的单个线程,同步方法调用仍然比非同步方法调用慢。如果同步实际上需要竞争锁,那么性能损失会更大,因为需要多次线程切换和系统调用。

幸运的是,JVM 的持续改进既提高了 Java 程序的整体性能,又降低了与每个版本同步的相对成本,并且预计未来会有改进。此外,同步的性能成本常常被夸大。一位知名人士指出,同步方法调用比非同步方法调用慢 50 倍。虽然这种说法可能是正确的,但它也具有相当的误导性,导致许多开发人员即使在需要的情况下也避免同步。

话虽如此,并发编程仍然可能很慢,但现在这不再纯粹是 Java 的错。精细锁定和粗略锁定之间需要权衡。太粗显然是不好的,但也可能太细,因为锁的成本非零。

考虑争用的特定资源非常重要。机械硬盘就是一个例子,更多的线程可以导致worse表现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Java 中的同步成本很高? 的相关文章

随机推荐