2017-10-14 192 views
1

最近我决定试一试,并开始阅读由Raul Estrada编写的书籍“SMACK堆栈的快速数据处理系统”。经过2第一章中,我认为它是“你好,世界”的不那么糟糕的编译,除非我遇到的是:懒惰的评估和死锁

正如我们看到的,懒惰的评价还可以防止死锁和瓶颈,因为它可以防止一个 进程无限期地等待另一个进程的结果。

我惊讶地发现,并试图找到任何关于懒惰评估可以防止死锁的说法的论证。该声明涉及Scala和Spark。不幸的是我没有发现任何争论。据我所知,为了避免死锁,你必须确保那些至少一个永远不会发生:

  • 互斥
  • 锁定&等待
  • 没有抢占
  • 循环等待

懒惰的评估如何防止他们中的任何一个?

回答

1

懒惰评估本身并不能防止死锁,但它与另一个概念密切相关,即计算图。由于Spark将计算描述为一系列依赖性,因此它可以验证计算图是非循环(着名的DAG),因此不存在可能导致循环等待的情况。

在高级别Spark通过禁止嵌套转换和操作来强制执行此操作,这意味着在阶段之间不存在隐藏的依赖关系。