我是新奥尔良的新手,如果这是一个愚蠢的问题,请原谅我。
我最近看了一个教程,演示者创建了一个聚合参与者,用于查询其他单个参与者的状态集合。
既然参与者不能并行执行操作,那么以这种方式进行读取真的是一种反模式吗?或者orlean之所以如此快速,是因为它可以在内存中进行查询,所以读取不并行并不重要?
您完全正确,Grains是线程安全的。有一些方法可以覆盖这个规则,但是应该充分理解流,以避免意外的行为和问题,例如死锁。
允许在parallel中读取State的一种潜在方法是[ReadOnly]
属性。它允许您将[ReadOnly]
添加到方法中,以便跨多个客户端安全并发读取粒度状态,而不会因为多个客户端试图同时写入同一状态而导致数据损坏的风险。
这通过启用跨多个客户端的其他[ReadOnly]
方法之间的并行读取,提高了分布式奥尔良环境中读取操作的性能。
注:
当一个方法标记有[ReadOnly]
属性时,Orleans会生成代码来强制执行只读约束,从而防止任何修改方法中晶粒状态的尝试。如果尝试在[ReadOnly]
方法中修改粒度状态,生成的代码将检测到修改状态的尝试,并在运行时引发异常。
您可以通过链接获得更多关于Orleans Concurrent的详细信息,但对一些要点有一些纯粹的描述。