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
我正在测试 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