2016-12-15 32 views
2

我已經讀過一位阿卡人演員一個接一個地處理消息。爲什麼是這樣?爲什麼Akka Actor的默認行爲是一個接一個地處理消息?

什麼我無法包裹我的頭是「爲什麼是同步執行的消息的默認行爲?」。我明白,爲了並行執行郵箱消息,函數(要執行的工作)應該有0個副作用。

這是默認的akka​​行爲,因爲具有絕對獨立執行和0副作用的用例是MINORITY,我們通常使用需要公共資源的作業。

如果scala和函數式編程的設計目標是0副作用代碼,那麼爲什麼這不是akka actor消息處理中的默認行爲。

+0

我想一點是你想跨平臺不同的演員,但不是在一個特定的演員。 – marstran

回答

1

我的理解是,演員模型的一個關鍵點是讓並行編程更易於理解(並且更簡單地「正確」),而不會出現諸如死鎖等難以調試的問題。

這樣做是因爲:

  • 你可以通過創建多個角色和分裂它們之間的工作量輕鬆實現並行。
  • 每個角色內部的代碼都是單線程的,並且角色的狀態對其他角色是隱藏的,所以你不需要保護角色的內部狀態免受併發訪問問題的困擾。

如果演員能夠並行處理多個郵件,它可以同時訪問自己的內部狀態,你會回不必擔心鎖,同步,ConcurrentModificationException小號......這違背了點。

1

如果你看看Akka docs,你會發現兩個保證之一是每個發送者 - 接收者對的消息排序。如果消息以不確定的順序處理,則此擔保將受到損害。

相關問題