2017-10-14 226 views
1

最近我決定試一試,並開始閱讀由Raul Estrada編寫的書籍「SMACK堆棧的快速數據處理系統」。經過2第一章中,我認爲它是「你好,世界」的不那麼糟糕的編譯,除非我遇到的是:懶惰的評估和死鎖

正如我們看到的,懶惰的評價還可以防止死鎖和瓶頸,因爲它可以防止一個 進程無限期地等待另一個進程的結果。

我驚訝地發現,並試圖找到任何關於懶惰評估可以防止死鎖的說法的論證。該聲明涉及Scala和Spark。不幸的是我沒有發現任何爭論。據我所知,爲了避免死鎖,你必須確保那些至少一個永遠不會發生:

  • 互斥
  • 鎖定&等待
  • 沒有搶佔
  • 循環等待

懶惰的評估如何防止他們中的任何一個?

回答

1

懶惰評估本身並不能防止死鎖,但它與另一個概念密切相關,即計算圖。由於Spark將計算描述爲一系列依賴性,因此它可以驗證計算圖是非循環(着名的DAG),因此不存在可能導致循環等待的情況。

在高級別Spark通過禁止嵌套轉換和操作來強制執行此操作,這意味着在階段之間不存在隱藏的依賴關係。