【发布时间】:2011-02-14 14:00:34
【问题描述】:
我有一个 for 循环,我想与 PLINQ 的 Parallel.ForEach() 之类的东西并行化。
这里的关键是我调用来执行计算的 C++ 库显然不是线程安全的,因此,任何并行化此操作的计划都需要跨多个进程这样做。
我正在考虑使用 WCF 创建一个“分发器”进程,“客户端”和多个“计算器”都可以连接到该进程并在队列中添加/删除项目,然后“计算器”直接发送结果回到客户端,它可以在收到它们时更新 gui。这种架构可以让我将尽可能多的“计算器”在线上,就像我拥有的处理器一样,而且我认为它甚至可以在多台计算机上运行它们,从而创建一个潜在的处理能力农场,所有客户端都可以共享。
我只是想知道是否有人有这样做的经验,以及是否有现有的应用程序块或框架可以用来为我构建它。 PLINQ 在这个过程中完成它。有没有像 DPLINQ(分布式)之类的东西?
另外,如果不存在,有人想对我提出的架构发表意见吗?有什么明显的陷阱吗?有人认为它会起作用吗!?!?!?
【问题讨论】:
-
您需要在进程之间传输的数据量有多大?从我读到的 WCF 使用相当慢的序列化程序。因此,如果您传输大量数据,那么共享内存可能是个好主意。
-
在您为此投入太多时间之前,我会确保付出的努力是值得的。 PLINQ 很棒,因为它为您提供了“免费”的并行处理。
-
我知道 PLINQ 很棒 - 但由于这个库不是线程安全的问题,我无法使用它。出去的对象并没有那么大,但是这个过程会创建一些大块的数据,也许是 40-50 个数组,每个数组有 500 个双精度数?我认为 NetTCP 序列化程序足够快来处理这个问题。
标签: c# parallel-processing distributed-computing plinq