.net Net与缓存一致性

.net Net与缓存一致性,.net,multithreading,akka.net,.net,Multithreading,Akka.net,我正试图了解akka.net并发如何处理缓存一致性。假设我有一个Actor,它将一些状态存储为一个实例字段,我知道一次只处理一条消息。但是每个消息可能由线程池中的不同线程处理,可能在不同的核心/套接字上。akka.net如何确保不同的线程看到对状态字段所做的所有更改 关于akka的讨论有些类似,但我不确定缓存一致性问题是否得到了正确回答(见最后一条评论)。就缓存一致性而言,参与者的状态一次只能在单个线程上读取(无论哪个线程处理参与者的邮箱)通常,在将线程交给另一个参与者之前,该参与者一次最多要处

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


关于akka的讨论有些类似,但我不确定缓存一致性问题是否得到了正确回答(见最后一条评论)。

就缓存一致性而言,参与者的状态一次只能在单个线程上读取(无论哪个线程处理参与者的邮箱)通常,在将线程交给另一个参与者之前,该参与者一次最多要处理30条消息。这类似于Quantum在普通Windows/Linux调度程序中的工作方式


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

我没有使用最新版本的Akka.NET,但过去默认的线程池是在TPL之上构建的,因此,我认为如果情况仍然如此,那么问题在于.NET framework如何处理缓存一致性。