我试图围绕 akka.net 并发如何处理缓存一致性。假设我有一个将某些状态存储为实例字段的 Actor,我知道一次只处理一条消息。但是每个消息可能由线程池中的不同线程处理,可能在不同的核心/套接字上。 akka.net 如何确保不同的线程看到对 state 字段所做的所有更改?
关于 akka https://www.lightbend.com/blog/akka-and-the-java-memory-model 的一些类似讨论,但我不确定缓存一致性问题是否得到正确回答(请参阅最后一条评论)。
最佳答案
在缓存一致性方面 - 参与者的状态一次只能在一个线程上读取(无论哪个线程正在处理参与者的邮箱),并且通常该参与者将在将线程让给另一个线程之前一次处理多达 30 条消息 Actor 。它类似于量子在普通 Windows/Linux 调度程序中的工作方式。
因此,您可以将参与者内存的更新视为事务性的——两个处理器无法同时访问参与者的内存,因为它是私有(private)的,并且在给定时间只能由单个线程访问。由于这种缓存一致性一开始就不是问题,因为参与者模型强制读取和写入状态的线性化历史。
关于.net - Akka.Net 和缓存一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182644/