在多种谷物之间分配繁重的工作(微软奥尔良)

时间:2016-06-07 15:37:34

标签: c# actor distributed-computing orleans

我想计算一个简单的可并行化计算(例如Mandelbrot),其中Orleans在不同的晶粒上平行并且一旦晶粒完成就将结果合并在一起。但是,我不知道如何做到这一点,或者奥尔良是否是解决此类问题的正确框架。 另外,我要提一下,这不会是任何将投入生产的项目,我只是在玩奥尔良。

到目前为止,我的想法是: 我有一种谷物类型(让我们称之为" maingrain")这是客户端的入口点(也可能是谷物)。然后,这种谷物估计所需的处理能力的数量,并将任务分成较小的部分,这些部分从另一种谷物类型分配到其他谷物(我将称之为"亚晶粒")。让这些亚晶粒做这项工作并等待可以返回给客户的结果没什么大不了的,但是我不知道如何处理这些亚晶粒。

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

  • 我应该简单地使用X个新GUID激活X个新的底色并让垃圾收集器进行清理吗?
  • 我应该以某种方式重复使用以前激活的亚晶粒(某种池),我怎么知道亚粒子已经可以重复使用(=不忙)?
  • 如果我想使用多个maingrains,会发生什么。每个都处理它自己的亚晶粒吗?

你会怎么做?谢谢。

1 个答案:

答案 0 :(得分:6)

您可以将subgrain标记为" StatelessWorker"使用Orleans.Concurrency.StatelessWorkerAttribute。然后,当它的队列中存在积压的消息时,它将自动扩展粒度(创建相同粒度的多个实例),允许并行处理这些子任务。

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