2011-08-02 14 views
5

我是斯卡拉和阿卡的新手,正在考慮用它來解決問題。假設我有一個計算引擎(用於搜索解決方案)。我想通過爲每個節點上的每個cpu分配它自己的引擎實例來在cpus和跨節點上並行搜索。大型共享狀態的scala/akka/stm設計?

引擎輸入由少量標量輸入和一個非常大的散列表組成。每個引擎實例都會使用它的標量輸入對散列表進行一些小的本地修改,計算一個善良,然後放棄它的修改(它們不需要被任何其他引擎實例提交/查看)。善良价值將被返回給一些協調員,他們可以在結果中進行選擇。

我正在讀一些關於STM TransactionalMap作爲共享狀態的工具。這看起來很理想,但我真的沒有看到任何使用它作爲共享狀態的完整示例。

問題:

  • 請問演員/ STM模型似乎適合這個問題?
  • 你能舉出一個如何分配共享狀態的具體例子嗎? (是參考文獻[TransactionalMap [,]]作爲消息?
  • 有什麼大約爲跨越不同的節點而不是一個節點內分配共享狀態不同?

探究頭腦要知道,

艾倫

回答

1

在處理共享內存它聽起來並不像STM將在這裏是正確的選擇,因爲你不想在引擎實例做出承諾哈希表的共享副本的修改條款。

相反,immutable HashMap可能更適合。引擎實例可以共享地圖中未更改的元素,而每個地圖中的差異只會佔用額外的內存空間。

演員模型很適合你想做的事。爲每個您想要的引擎實例設置一個actor,並將其傳遞給標量值和hashmap。然後讓它將結果返回給協調員。