微软奥尔良每个筒仓的最大谷物数量

时间:2015-07-10 06:48:40

标签: configuration distributed-computing orleans

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

我的谷物不会纯粹受CPU限制,并会执行一些IO和其他相关任务。我担心如果我让它狂奔,它会激活大量的实例,这会使整个事情陷入困境。

这样的筒仓配置是否可能?

3 个答案:

答案 0 :(得分:4)

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

如果您绝对需要执行阻止IO,则可以在谷物的SynchronizationContext之外执行IO,并在谷物中执行await结果,如下所示:

var result = await Task.StartNew(() => {
  // Perform blocking work.
  return 43;
}, TaskCreationOptions.LongRunning);

TaskCreationOptions.LongRunning提示调度程序应该使用新线程。 更好的方法是创建自己的ThreadPool&amp;该工作的后续TaskScheduler并将其用于您的IO。

请注意,您应该了解潜在的dangers of Task.StartNew

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

似乎Silo配置xml文件具有该配置功能。<​​/ p>

<Scheduler MaxActiveThreads="15"/>

指定了online的XSD。