4

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

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

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

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

你会怎么做?谢谢你。

4

1 回答 1

6

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

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

于 2016-06-08T11:04:15.593 回答