.net - Akka.Net 和缓存一致性

标签 .net multithreading akka.net

我试图围绕 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/

相关文章:

c - 在 C 中使用清理处理程序安全取消 pthread

具有线程安全队列的 C++11 事件循环

f# - 为什么我的 Actor 没有收到消息?

f# - 为什么 Akka.Net F# API 定义了 actorOf2 而不是 actorOf3、actorOf4 等?

c# - .Net 组件将所有主要文件格式转换为 PDF

c# - 在 VS2012 C# 项目中剪切和粘贴 WinForms 控件时保留事件处理程序分配?

c# - 与应用程序的文件类型关联 (C#)

c++ - 多线程老板/ worker 模型的C/C++实现

c# - 如何使用 ReceiveAsync 测试 Akka.NET actor 中的异步异常

c# - X509Certificate2 的私钥不可导出?