java - Spark 中的 volatile 变量

标签 java multithreading apache-spark volatile

在 Spark 内部使用多线程时, volatile 变量如何工作?

我有一个多线程进程,它使用 volatile total 变量来跟踪多个线程之间的总和。该变量和所有正在执行的方法都是静态的。我很好奇如果我有多个 Spark Worker 并行执行此进程的单独实例,则此变量将如何表现。

每个节点都有自己的 total 变量还是会在工作节点之间共享?

编辑:我想要多线程并使用 Spark 的原因是我的程序是一种遗传算法,其流程如下:将 n 个群体分配给 Spark,理想情况下每个 worker 分配 1 个群体。每个种群有10-100个“个体”。对于每个个体,通过运行多线程过程 100 次(每次迭代都有一个小的参数变化)来计算其适应度,并返回迭代总数的函数。

多线程进程需要很长时间,因此我想以任何可能的方式加快速度。

最佳答案

好吧,我想我是通过结合 @vanza 的评论和答案 here 来解决这个问题的。 。

本质上,每个工作节点都有自己的执行多线程进程的类实例,因此它们不会重叠。这实际上非常直观,因为如果我的工作节点位于不同的机器上,它们之间不会共享变量。

关于java - Spark 中的 volatile 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37127557/

相关文章:

java - 我不明白 Java 中二进制数的行为

java - 在 List、Set、Queue、Deque 中转换数组 int、boolean、double、long 和 String

c# - 在 UI 线程中修改 ObservableCollection 会导致错误,即使在使用 UI 调度程序时也是如此

java - 如何在Java中暂停/重新启动SingleThreadExecutor(ExecutorService)?

c# - 为什么 Interlocked.Exchange 不支持 Boolean 类型?

gradle - 为什么运行时依赖项在gradle中不起作用?

java - 如何获取Windows中正在运行的应用程序的PID?

scala - 有没有办法优化spark sql代码?

apache-spark - Zeppelin 抛出 java.lang.OutOfMemoryError : Java heap space

java - 将 Java Stream 过滤为 1 个且仅 1 个元素