Akka.Net和缓存一致性

时间:2016-08-27 15:14:15

标签: .net multithreading akka.net

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

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

1 个答案:

答案 0 :(得分:3)

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

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