2016-08-27 113 views
4

我想圍繞akka.net併發性如何處理緩存一致性。假設我有一個Actor,它存儲了一些狀態作爲實例字段,我知道一次只能處理一條消息。但是每條消息都可能由線程池中的不同線程處理,可能位於不同的核心/套接字上。 akka.net如何確保不同的線程可以看到對狀態字段所做的所有更改?Akka.Net和緩存一致性

關於akka https://www.lightbend.com/blog/akka-and-the-java-memory-model的討論有點類似,但我不確定緩存一致性問題是否得到了正確回答(請參閱最後一條評論)。

+0

我沒有使用最新版本的Akka.NET,但過去默認線程池是建立在TPL之上的,所以我想如果這仍然是這種情況,那麼這是一個如何.NET的問題。框架句柄的緩存一致性。 – easuter

回答

2

就緩存一致性而言 - 一次只能在一個線程上讀取actor的狀態(無論哪個線程正在處理actor的郵箱),並且通常該actor將一次處理多達30條消息該線程給另一個演員。這與量子在正常的Windows/Linux調度器中的工作方式類似。

因此,您可以將事件的更新視爲事務處理 - 兩個處理器無法同時訪問一個actor的內存,因爲它是私有的,並且只能在給定時間通過一個線程訪問。由於這種緩存一致性不是一個開始的問題,因爲actor模型強制讀取和寫入狀態的線性化歷史。