Я использую ThreadPool
для выполнения нескольких процессов параллельно, как показано here с той разницей, что я запускаю свой собственный процесс/программу с некоторыми параметрами. В нескольких словах эта программа вычисляет некоторые значения и записывает их в текстовый файл, который я потом сравниваю.Параллельная обработка большого количества процессов
public void StartProcess()
{
string par = @"-p ""foo"" -c 17";
Process p = Process.Start(@"C:\MyProgramm.exe", par);
p.EnableRaisingEvents = true;
p.Exited += new EventHandler(p_Exited);
}
void p_Exited(object sender, EventArgs e)
{
// Indicates that the process has been completed
this.doneEvent.Set();
Console.WriteLine("thread {0} end...", ThreadIndex);
}
Для небольшого количества потоков он отлично работает. В моем случае я должен начать около 200 потоков, но в WaitHandle.WaitAll
методе я получаю NotSuppotedException
Количество объектов в waitHandles больше, чем система разрешений.
Мой вопрос сейчас: есть ли возможность ThreadPool
класса для управления большим количеством потоков? Что-то вроде очереди, начиная новые процессы, когда другие были завершены. Чтобы быть простым, в моем случае процесс = поток.
Даже современный компьютер, работающий на 200 программах одновременно, займет больше времени, чем запуск программы X в параболическом (X равно числу логических процессоров). Вам действительно нужно запускать их все одновременно? Не можете ли вы просто использовать TPL для очереди работы? –
Конечно, нет, я хочу, чтобы пул потоков управлял самым эффективным числом параллельных заданий. К сожалению, я использую C# 2.0 и не могу использовать TPL – alex555