Microsoft Orleans 每个筒仓的最大谷物数

Microsoft Orleans maximum grains per silo

我正在测试 Microsoft Orleans 作为分布式计算框架的可行性。看起来它可能有效,但我想知道如何设置给定筒仓中的最大活性谷物数量?

我的grains不会纯粹CPU绑定,会执行一些IO和其他相关任务。我担心如果我让它 运行 疯狂,它会启动大量实例,这会使整个事情陷入困境。

这样的silo配置可行吗?

Silo 配置 xml 文件似乎具有该配置能力。

<Scheduler MaxActiveThreads="15"/>

它的XSD指定为online

奥尔良非常适合不受CPU限制的工作。 Orleans grains 旨在使用 Task<T> 进行异步而不是线程,因此您应该始终执行异步 IO,使用 C# 的 [async/await][1] 功能。

如果你绝对需要执行阻塞 IO,你可以在 grain 的上下文之外执行 IO,然后 await 在你的 grain 中得到结果,就像这样:

var result = await Task.Run(() => {
  // Perform blocking work.
  return 43;
});

最好将所有阻塞操作卸载到线程池并保持默认的 MaxActiveThreads (#cores)。 基本上你永远不想阻塞 Orleans 线程(那些 MaxActiveThreads)。那些 Orleans 线程应该进行轻度计算并发出外部异步调用(对其他谷物或外部服务)。所有繁重的计算都不应在 Orlean 的线程上完成。

您可以这样做并且仍然保持单线程执行保证。 看这里:http://dotnet.github.io/orleans/Advanced-Concepts/External-Tasks-and-Grains