다른 스레드에서 병렬 실행으로 장기 실행 작업을 실행하면 PC에 여러 프로세서 코어가있는 경우 성능이 크게 향상된다는 것을 읽었습니다. C#에는 함수 Parallel.ForEach
이 있습니다.이 함수는 각 프로세서 코어에서 실행되는 별도의 스레드에서 장시간 실행되는 작업을 분할합니다. 비록 하나의 코어 만 있다면이 기능은 단순한 Foreach
루프 (동기식)로 실행됩니다. 또한 프로세서 코어보다 많은 스레드를 생성하는 경우에도 부정적인 영향을 미칠 수 있습니다.장기 실행 작업을 별도의 프로세스로 분할하여 프로그램 성능 향상
별도의 콘솔 응용 프로그램을 만들려고하는데 args
을 전달하고 start -WindowStyle Hidden SeparateProcess.exe
과 같은 여러 프로세스에서 .exe를 실행하십시오.
편집 : 나는 이미 그런 다음이
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(200);
Console.WriteLine("" + i);
}
Console.WriteLine();
Console.WriteLine(Guid.NewGuid() + ": Process finalized.");
}
}
같은 콘솔 응용 프로그램을 만들어
가 사용 PowerShell을 그것을 실행 여러 번 : 하나에 실행할 때
For ($i=0; $i -lt 10; $i++){
start -WindowStyle Normal SeparateProcess.exe
}
이 프로그램의 성능이 향상됩니다 핵심?
참고 : 장기 실행 작업은 Emgu CV 이미지 컴퓨팅 알고리즘입니다.
다중 스레드는 다중 코어를 사용하는 것만을위한 것이 아닙니다. 응용 프로그램과 해당 스레드가 수행하는 작업에 따라 단일 코어 시스템에서 실행되는 다중 스레드 응용 프로그램이 단일 코어에서 실행되는 단일 스레드 응용 프로그램보다 여전히 더 효과적 일 수 있습니다. 여러 프로세스의 한 가지 단점은 메모리 또는 리소스를 공유 할 수 없으며 여러 스레드가있는 단일 프로세스가 공유 할 수 있다는 것입니다. – RavB
당신의 프로세스는 CPU에 묶여 있지 않습니다 - 단지 대부분의 시간을 자고 있습니다.개선 된 실적은 어떤 모습일까요? 200 밀리 초 100 번 자고 거의 같은 시간이 걸릴 것입니다. 쓰기는 모두 같은 시간이 걸릴 것입니다. –
@RavB 멀티 코어 컴퓨터는 단지 10 년 이상 동안 공통적으로 사용되어 왔지만, 단일 코어 만있는 시스템에서는 다중 스레드를 사용할 이유가 충분합니다 (결국 스레딩은 수십 년 동안 일반적으로 사용되었습니다)) 그 이유는 성과가 아닙니다. 단일 코어 머신에서 멀티 쓰레드 코드는 항상 * less * performant (동일한 작업을 수행하지만 스레딩 오버 헤드를 가짐)이지만 스레딩 오버 헤드에도 불구하고 유용 할 수 있습니다. – Servy