我想用Orleans在不同的平行晶粒上计算一个简单的可并行计算(例如Mandelbrot),并在晶粒完成后将结果合并在一起。然而,我不确定如何做到这一点,也不确定奥尔良是否是解决这类问题的正确框架。另外,让我提一下,这不会是任何将要投入生产的项目,我只是在奥尔良玩。
到目前为止,我的想法是:我有一个graintype(我们称之为"maingrain"),它是客户端的入口点(也可能是一个grain)。然后,这个颗粒估计所需的处理能力,并将任务划分为较小的部分,这些部分被分配给另一种颗粒类型的其他颗粒(我将称之为"子颗粒")。让这些子网格完成工作并等待结果返回给客户并没有什么大不了的,但我不知道如何处理这些子网格。
比方说,有一个调用,我想使用10个子网格。我用一个新的GUID来获取每个GUID,并让它们工作。它们完成了,客户得到了结果。现在有一个调用,我想使用X子网格:
- 我应该简单地用X个新的GUID激活X个新子网格并让垃圾收集器进行清理吗
- 我应该以某种方式重用以前激活的子网格(某种池化)吗?我如何知道子网格已经是可重用的(=不忙)
- 如果我想使用多个主粒度,会发生什么。每个都处理自己的子网格吗
你会怎么做?非常感谢。
您可以使用Orleans将子网格标记为"StatelessWorker"。并发。StatelessWorkerAttribute。当队列中有消息积压时,这将自动扩展粒度(创建同一粒度的多个实例),从而允许并行处理这些子任务。
关于无国籍工人,我发现这很有趣:http://encloudify.blogspot.co.uk/2014/05/grains-grains-and-more-grains.html