在 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/