Akka.Net 和缓存一致性

Akka.Net and cache coherence

我正在努力思考 akka.net 并发如何处理缓存一致性。假设我有一个 Actor 将一些状态存储为实例字段,我知道一次只处理一条消息。但是每条消息可能由线程池中的不同线程处理,可能在不同的 core/socket 上。 akka.net 如何确保不同的线程看到对状态字段所做的所有更改?

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

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

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