分布式并行批处理

时间:2012-05-01 08:18:33

标签: c# .net multithreading c#-4.0 task-parallel-library

我正在试图找出问题陈述的解决方案。为简单起见,应用程序将成为一个控制台应用程序。数据库包含大约10000行。我有一个开发一个c#应用程序,它将产生10个线程,每个线程将处理来自数据库的5条记录。现在问题是我将在另一台机器上运行相同的应用程序。所以我们有两个应用程序实例,每个应用程序应该处理5000行,它们不应该重叠在记录上。此外,我需要一个中央控制器,需要显示每个应用程序上运行的线程ID。这里解决这个问题的任何指针都会很棒。

2 个答案:

答案 0 :(得分:3)

我会在数据库中创建一个“处理状态”列,每个实例都会通过更改记录的状态来标记它正在处理的记录。

另一种解决方案是使用队列或Service Broker,每个实例都会选择一条消息来处理来自公共队列的记录。您将需要另一个将填充队列的进程。

使用WCF在计算机之间进行通信以同步工作是恕我直言,太复杂而且难以正确使用。

答案 1 :(得分:2)

我同意Jakub。如果您希望单独的实例直接相互通信,您应该阅读有关Two Generals问题(http://en.wikipedia.org/wiki/Two_Generals%27_Problem)并考虑如何设计非阻塞没有比赛的约会。