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

Tho*_* D. 4 c# distributed-computing actor orleans

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

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

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

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

你会怎么做?谢谢.

S. *_*ley 6

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

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