在多个谷物之间分配繁重的工作(Microsoft Orleans)

Distribute heavy work between multiple grains (Microsoft Orleans)

我想使用 Orleans 在不同的粒度上并行计算一个简单的可并行计算(例如 Mandelbrot),并在粒度完成后将结果合并回一起。但是,我不确定该怎么做,或者 Orleans 是否是解决此类问题的正确框架。 另外让我提一下,这不会是任何将投入生产的项目,我只是在玩 Orleans。

到目前为止,这是我的想法: 我有一个 graintype(我们称它为 "maingrain"),它是客户端的入口点(也可能是 grain)。然后这个 grain 估计所需的处理能力并将任务分成更小的部分,这些部分分配给来自另一个 graintype 的其他 grain(我将这些称为 "subgrains")。让这些 subgrains 完成工作并等待可以返回给客户端的结果没什么大不了的,但是我不确定如何处理 subgrains。

比方说,有一个调用我想使用 10 个子颗粒。我通过一个新的 GUID 获取每个并让它们工作。他们完成了,客户得到了结果。 现在有一个我想使用 X 亚晶粒的调用:

你会怎么做?谢谢。

您可以使用 Orleans.Concurrency.StatelessWorkerAttribute 将亚晶标记为 "StatelessWorker"。当队列中有消息积压时,这将自动扩展 grain(创建相同 grain 的多个实例),从而允许并行处理这些子任务。

发现关于无国籍工人这很有趣:http://encloudify.blogspot.co.uk/2014/05/grains-grains-and-more-grains.html