2

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

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

这样的筒仓配置可能吗?

4

3 回答 3

6

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

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

var result = await Task.Run(() => {
  // Perform blocking work.
  return 43;
});
于 2015-07-12T01:47:36.843 回答
3

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

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

于 2015-07-23T20:25:34.910 回答
0

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

<Scheduler MaxActiveThreads="15"/>

它的 XSD 是在线指定的。

于 2015-07-10T22:33:54.140 回答