为什么在Java中同步昂贵?

为什么在Java中同步昂贵?,第1张

为什么在Java中同步昂贵?

也许还没有你想的那么糟

它曾经是可怕的(这可能就是您读到它“非常昂贵”的原因)。这些模因可能需要很长时间才能消失

同步有多贵?

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

幸运的是,对JVM的持续改进既提高了Java程序的整体性能,又降低了与每个发行版同步的相对成本,并且可以预期将来会进行改进。此外,同步的性能成本通常被夸大了。一位著名的消息人士提到,同步方法调用的速度比非同步方法调用的速度慢50倍。尽管此声明可能是正确的,但它也极具误导性,并导致许多开发人员即使在需要时也避免进行同步。

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

重要的是要考虑竞争中的特定资源。机械硬盘是一个例子,其中多个线程可能会导致 糟糕的 性能。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5130396.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存