2012-11-07 48 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個進程。那麼這是操作系統如何處理這個問題。