2016-08-27 21 views
4

私は、akka.netの並行性がキャッシュの一貫性をどのように処理するかを考えています。私はインスタンスフィールドとしていくつかの状態を格納する俳優があるとしましょう、私は一度に1つのメッセージだけが処理されることを理解します。しかし、各メッセージは、おそらく異なるコア/ソケット上のスレッドプールとは異なるスレッドによって処理されることがあります。 akka.netはどのようにして、異なるスレッドが状態フィールドに加えられたすべての変更を確認するのですか?Akka.Netとキャッシュの一貫性

akka https://www.lightbend.com/blog/akka-and-the-java-memory-modelについては多少似ていますが、キャッシュ一貫性の問題については適切に答えられていますか(最後のコメントを参照)。

+0

私はAkka.NETの最新バージョンを使用していませんが、これまではデフォルトのスレッドプールはTPLの上に構築されていましたので、これがまだ当てはまる場合は、.NETフレームワークハンドルのキャッシュ一貫性。 – easuter

答えて

2

アクターの状態は、一度に1つのスレッド(アクターのメールボックスを処理しているスレッド)でのみ読み取られ、通常、そのアクターは降順になる前に一度に30メッセージまで処理します他のアクターへのスレッド。これは、通常のWindows/Linuxスケジューラで量子がどのように機能するかと似ています。

したがって、アクターのメモリへの更新をトランザクショナルとして見ることができます。これは、2つのプロセッサーが同時にアクターのメモリーにアクセスする方法ではありません。このキャッシュ・コヒーレンシの結果として、アクター・モデルは状態への読み取りおよび書き込みの線形化可能な履歴を強制するため、最初は問題ありません。