2012-11-07 30 views
0

我使用ThreadPool并行执行多个进程,如图所示here ,区别在于我用一些参数启动我自己的进程/程序。简单地说,这个程序会计算一些值并将它们写入一个文本文件中,然后再进行比较。并行处理大量进程

​​

对于少数线程它工作正常。在我来说,我必须开始约200个线程,但在WaitHandle.WaitAll方法,我得到一个NotSuppotedException

在waitHandles对象的数量比系统 允许更大。

我现在的问题是:有没有类ThreadPool管理大量线程的可能性?像队列一样,当另一个完成时启动新的进程。 简单来说,在我的情况下是一个进程=线程。

+1

即使是现代计算机,同时运行200个程序也需要比平行运行X程序(X等于逻辑处理器数量)更长的时间。你真的需要同时运行它们吗?你不能简单地使用TPL排队工作吗? –

+0

当然不是,我只想让线程池管理最高效的并行作业数量。不幸的是,我使用C#2.0并且不能使用TPL – alex555

回答

0

创建一个单场

private volatile int ProcessesStillRunning; 

在你开始你的过程,它初始化为正确的值

this.ProcessesStillRunning = 200; 
this.StartProcesses(200); 
// now wait on your doneEvent 

修改您的处理程序,以使该字段递减过程一旦退出

if (System.Threading.Interlocked.Decrement(ref this.ProcessesStillRunning) == 0) 
    this.doneEvent.Set(); 

当然,你现在应该知道你的方法不会使用任何.NET内置的并行性限制,只会运行200个进程。那么这是操作系统如何处理这个问题。