微软奥尔良一个存储器中最大的颗粒数量

3
我正在测试 Microsoft Orleans 作为分布式计算框架的可行性。看起来它可能会起作用,但我想知道如何在给定的 silo 中设置活动 grains 的最大数量?
我的 grains 不仅仅是 CPU 绑定的,还将执行一些 IO 和其他相关任务。我担心如果我让它随意运行,它会启动大量实例,从而拖慢整个系统。
像这样配置 silo 是否可行?
3个回答

7

Orleans非常适用于非CPU密集型工作。Orleans grains的设计使用Task<T>来进行异步处理,而不是线程,因此您应该始终使用C#的[async/await][1]特性进行异步IO。

如果您绝对需要执行阻塞IO操作,可以在grain的上下文之外执行IO操作,并在grain中使用await等待结果,如下所示:

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

3
最好将所有阻塞操作都转移到线程池中,并将MaxActiveThreads保持默认值(#cores)。 基本上,您永远不希望阻止Orleans线程(即那些MaxActiveThreads)。 这些Orleans线程应该执行轻量级计算并发出外部异步调用(到其他粒度或外部服务)。 所有繁重的计算都不应在Orlean的线程上完成。
您可以这样做,仍然可以保持单线程执行的保证。 请参见此处:https://dotnet.github.io/orleans/docs/grains/external_tasks_and_grains.html

0

看起来Silo配置XML文件具有该配置能力。

<Scheduler MaxActiveThreads="15"/>

它的XSD规范已经在线指定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接