Akka.Net和缓存一致性

Lar*_* KJ 5 .net multithreading akka.net

我试图围绕akka.net并发如何处理缓存一致性.假设我有一个Actor将某个状态存储为实例字段,我知道一次只处理一条消息.但是每个消息可能由与线程池不同的线程处理,可能在不同的核心/套接字上.akka.net如何确保不同的线程看到对状态字段所做的所有更改?

关于akka https://www.lightbend.com/blog/akka-and-the-java-memory-model的讨论有点类似,但我不确定缓存一致性问题是否得到了正确回答(参见最后评论).

Aar*_*web 3

就缓存一致性而言 - Actor 的状态一次只能在单个线程上读取(无论哪个线程正在处理 Actor 的邮箱),并且通常该 Actor 在将线程交给另一个线程之前一次最多处理 30 条消息演员。它与普通 Windows/Linux 调度程序中量子的工作方式类似。

因此,您可以将对参与者内存的更新视为事务性的 - 两个处理器无法同时访问参与者的内存,因为它是私有的并且在给定时间只能由单个线程访问。因此,缓存一致性一开始就不是问题,因为参与者模型强制对状态进行线性化的读取和写入历史记录。