c# - 在多个 Cereal 之间分配繁重的工作(Microsoft Orleans)

标签 c# actor distributed-computing orleans

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

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

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

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

你会怎么做?谢谢。

最佳答案

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

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

关于c# - 在多个 Cereal 之间分配繁重的工作(Microsoft Orleans),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683700/

相关文章:

c# - 等待页面加载

scala - akka 将任务拆分为更小的结果并折叠结果

scala - 在Scala中使用Futures而不是并行集合有什么好处?

java - 将两个 SOAP 服务合二为一的首选设计 "transaction"

c# - 将实时数据从服务器端 c# 程序推送到多个 WPF 客户端的最佳方法是什么?

Hadoop+Spark - 一旦应用程序正常启动一次就会显示错误

C# boolean 值大小写

c# - 用C#读取Excel文件——选择工作表

c# - Unity 中通过 WebRTC 进行 P2P 数据传输

scala - Akka: Actor 生成与填满邮箱