【问题标题】:Volatile keyword in multicore vs single processor?多核与单处理器中的易失性关键字?
【发布时间】:2014-05-11 13:14:04
【问题描述】:

我听到很多人说 volatile 关键字在多核处理器中更有意义 比单核处理器,但不知道原因。我试图谷歌但没有帮助 这方面。有什么原因吗?

根据我的理解,无论是多核还是单处理器,volatile 关键字都应该具有同等的重要性。 原因在于 volatile ,它保证值将在主内存(堆)中更新而不是保持 它在所有线程都可以看到的线程本地内存(堆栈)中。所以无论是多核还是单处理器, 它有什么不同?

【问题讨论】:

  • 你的学长说错了,恐怕;他没有考虑到 TLS(线程本地存储),甚至一些单核 CPU 也有
  • 多线程在多核系统中可能更常见,但它也肯定在单处理器系统中使用。所以你是对的,volatile 在这两种情况下都很重要。
  • 您可以说,忘记必要的volatile 更有可能在 SMP 机器上崩溃,但在编写软件时推测崩溃的可能性是没有意义的。你是对的,重新排序和延迟读/写也与单 CPU/核心系统相关。

标签: java multithreading concurrency volatile


【解决方案1】:

“波动感”与核心数无关。 JVM 隐藏了底层架构。更不用说 volatile 是一个语言关键字,所以它在每个架构上的行为都应该相同。

您描述了 volatile 的作用,它是正确的。 应用程序的架构,可能需要使用 volatile,仅此而已。

如果您有兴趣,这里有一篇与 volatile 相关的精彩帖子,以及 Java 中使用的内存模型的基本概念。

http://jeremymanson.blogspot.hu/2008/11/what-volatile-means-in-java.html

【讨论】:

    【解决方案2】:

    首先,“volatile”试图减少跨不同线程可能发生的可见性问题(想想每个线程范围内的局部变量/共享变量的副本)。但是,当您拥有多个 CPU 内核(高速缓存、寄存器)时,并行化水平会越来越容易可视化。 IMO,这就是为什么它在多核架构中更有意义。然而,当你有一个单核、多个线程并且其中两个碰巧在另一个更新它之前一个接一个地读取相同的变量值时,甚至可能会出现这种可见性问题。在任何一种情况下,无论具有单核还是多核架构,volatile 都会以相同的方式工作。

    关键是要了解 CPU 缓存或寄存器上的 volatile 变量将使用 IMMEDIATE 写入策略写回主内存,因此对同一变量的任何后续读取都会读取最新更新的值。

    Volatile 只会增加同步线程的机会 - 但它保证。如果您有多个线程更新共享数据,那么仅靠 volatile 可能还不够。您还可以通过 volatile 概念利用其他功能。请看here

    【讨论】:

      【解决方案3】:

      据我了解,volatile 与单核无关。易失性变量更新从主内存推送/读取,这在多核架构中很重要,其中每个内核都可以拥有自己的缓存,因此特定内核缓存中的更新对于运行在不同内核上的其他线程可能不可见。

      但是,如果您有一个内核,那么当您更新一个非易失性变量时,如果它在内核的缓存中更新而不被推送到主内存,这可能没问题,因为所有其他线程都在同一个内核上运行因此将看到他们都共享的缓存中可用的最新值。所以你不需要 volatile 那里。

      【讨论】:

        【解决方案4】:

        你的理解是正确的。 volatile 关键字在单线程应用程序中没有意义,无论它运行在单核还是多核 CPU 上,因为volatile 变量保证更改对线程可见。如果不这样做,即使在单核环境中,您也很可能会遇到可见性问题。如果多线程应用程序在单核或多核环境中运行,有时您需要volatile 变量(或其他方式或同步/可见性保证)。

        【讨论】:

        • 谁说应用是单线程的?与单/多核架构相关的问题。
        • 您的答案似乎考虑了单核上的单线程和多核上的多线程,但似乎跳过了单核上的多线程。这个问题的核心是什么
        猜你喜欢
        • 2014-12-17
        • 2015-12-29
        • 1970-01-01
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多