原子整数与整数的性能差异

2022-09-02 19:17:31

和 之间是否有任何性能差异?AtomicIntegerInteger


答案 1

这两种类型的选择不应取决于性能。主要选择是是否要通过对整数的操作实现线程安全。AtomicInteger

但是,性能差异可能很大程度上取决于所选的操作系统,因为原子操作的详细实现取决于操作系统。


答案 2

AtomicInteger允许使用特殊的硬件指令以无锁方式执行某些(不是全部!)操作,否则这些操作将需要同步。这对性能的影响有些复杂:

  • 首先,这是一种微优化,仅当此特定操作位于应用程序的关键路径上时才重要。
  • 特殊的硬件指令在非主流平台上可能不可用,在这种情况下,可能会使用同步来实现。AtomicInteger
  • JVM 通常可以在没有争用时优化锁定开销(例如,单线程应用程序)。在这种情况下,可能没有区别。
  • 如果存在低到中等程度的锁争用(即多个线程,但它们主要执行其他操作,而不仅仅是访问该整数),则无锁算法的性能优于同步。
  • 如果存在非常严重的锁争用(即花费大量时间尝试访问该整数的大量线程),则同步的性能可能更好,因为无锁算法基于在操作因冲突而失败时不断重试操作。

推荐