here 과 같이 여러 프로세스를 병렬로 실행하려면 ThreadPool
을 사용합니다. 일부 매개 변수를 사용하여 자체 프로세스/프로그램을 시작한다는 차이점이 있습니다. 몇 마디로,이 프로그램은 몇 가지 값을 계산하여 텍스트 파일에 기록합니다. 나중에 비교해 보겠습니다.다수의 프로세스 병렬 처리
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
방법 나는 waitHandles에있는 객체의 수는 시스템 허용하는 것보다 더 큰 NotSuppotedException
를 얻을.
제 질문은 : ThreadPool
클래스가 많은 수의 스레드를 관리 할 가능성이 있습니까? 대기열과 비슷한 것으로, 다른 프로세스가 완료되면 새로운 프로세스가 시작됩니다. 간단한 경우, 내 경우 프로세스 = 스레드.
현대의 컴퓨터 일지라도, 200 개의 프로그램을 동시에 실행하는 것은 parrallel에서 X 프로그램을 실행하는 것보다 시간이 오래 걸릴 것입니다 (X는 논리 프로세서의 수와 같습니다). 당신은 실제로 그것들을 모두 동시에 실행할 필요가 있습니까? TPL을 사용하여 작업을 큐에 대기시킬 수 없습니까? –
물론, 단지 스레드 풀이 가장 효율적인 병렬 작업 수를 관리하기를 원합니다. 불행히도 C# 2.0을 사용하고 TPL을 사용할 수 없습니다. – alex555